Hvordan kan jeg legge til valgfrie navngitte parametere til en TypeScript-funksjonsparameter?


Jeg ønsker å kunne definere en metode som aksepterer en pilfunksjon som en parameter. Funksjonsparameteren skal kunne definere 0 eller flere navngitte parametere selv. Hvordan kan jeg gjøre dette?

Jeg har prøvd

public doSomething(fn: () => any) {}

og

public doSomething(fn: (...args) => any) {}

men begge gir en "leverte parametere samsvarer ikke"-feil når jeg prøver å kalle den som følger:

doSomething((test: string) => {})

(Merk at typen og antallet parametere til denne funksjonen kan variere ved hver bruk, så jeg kan ikke angi typen(e) på den opprinnelige metoden.)

Jeg kan levere parametere ved å bruke ...args-syntaksen i den overførte funksjonen, men jeg ønsker å kunne skrive og navngi spesifikke parametere.

Er det en måte å gjøre dette på?

Svar #1

To alternativer. Grunner Type Safety. Hvis du går gjennom uttalelsene nedenfor, bør det være klart.

Fiks tilbakeringingen:

Hvis funksjonen din forventer å kalle tilbakefunksjonen med 0 eller flere argumenter, må tilbakefunksjonen være OK med det (dvs. ha valgfrie argumenter), altså

function doSomething(fn: () => any) {}

// All arguments need to optional 
doSomething((a?:string)=>{});

Samme som :

function doSomething(fn: (...args:string[]) => any) {}

// All arguments need to optional 
doSomething((a?:string)=>{});

Fiks tilbakeringingssignaturen:

Hvis du skal kalle tilbakefunksjonen med nøyaktig 'N' argumenter, spesifiser navnene deres i signaturen. Det er opp til tilbakekallingen å ta eller ignorere disse. F.eks. denne tilbakekallingen ignorerer dem:

// Specify the number of arguments
function doSomething(fn: (ar1:string,arg2:string) => any) {}

doSomething(()=>{});

Relaterte artikler