Typescript: Krävs callback-parametrar?


Jag vill definiera en funktion som tar en callback som parameter, och den callbackens parametrar ska vara obligatoriska. Typescript rapporterar korrekt en callback med fel typ på parameter, men säger ingenting om callbacks utan förväntade argument.

Varför ger det andra on-anropet inte ett fel, och finns det något sätt att få det att ge ett fel?

function on(callback: (num: number) => void) {
    callback(5);
}

on((string:bob) => { // typescript error
    console.log("What");
});

on(() => { // no typescript error?
    console.log("What");
});

Svar #1

Det finns inget sätt att göra detta.

Callbacks med färre parametrar än vad anroparen tillhandahåller är extremt vanliga i JavaScript - funktioner som forEach, map, filter osv tillhandahåller alla 3 eller fler argument men får ofta 1-parameterfunktioner som callbacks.

Svar #2

Du kan definiera en typ för handläggaren. Nu kan du bara skicka en callback som har ett strängargument.

// define a handler so you can use it for callbacks
type Handler = (t: string) => void;

function doSomething(t: string): void {
    console.log("hello " + t)
}

function thisFirst(callback: Handler) {
  callback('world') // ok
  callback(4) // not assignable to type 'string'
}

thisFirst(doSomething)

Relaterade artiklar