Gegeben das folgende erfundene Codebeispiel, wobei T
eine Function
sein kann oder nicht, wie kann ich es in Typescript so umwandeln, dass ich es ausführen kann (vorausgesetzt, das ist überhaupt möglich)?Wie kann ich ein generisches in eine ausführbare Funktion umwandeln?
class Test<T> {
constructor(public value: T) {}
method() {
if (this.value instanceof Function) {
let fn = <Function>this.value; // [ts] Neither type 'T' nor type 'Function' is assignable to the other.
fn();
}
}
}
let test = new Test(() => {});
test.method();
Wenn dies lösbar ist, kann ich es auch auf eine bestimmte Funktionssignatur anwenden, wie im Folgenden?
let fn: (input: T) => any = <(input: T) => Test<T>>this.value;
Ich habe einen halb legitime Anwendungsfall für sie (kann Hintergrund hinzufügen, falls erforderlich), aber ich kann nicht helfen, aber frage mich, ob ich einen quadratischen Pflock durch ein rundes Loch hämmern.
Interessant. Kann ich die doppelte Assertion mit einer Funktionsschnittstelle verwenden, ähnlich wie oben '(input: T) => Test '? –
dvlsg
@ dvlsg sicher. Antwort hinzugefügt – basarat
Sieht gut aus, danke für die schnelle Antwort! – dvlsg