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(()=>{});
