Учитывая следующий пример надуманного кода, где T
может быть или не быть Function
, как я могу использовать его в TypScript таким образом, который позволит мне выполнить его (если это вообще возможно)?
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();
Если это разрешимо, могу ли я применить его к определенной сигнатуре функции, как в следующем?
let fn: (input: T) => any = <(input: T) => Test<T>>this.value;
У меня есть полу-законный прецедент для него (можно добавить фон, если это необходимо), но я не могу не задаться вопросом, забиваю ли я квадратную привязку через круглое отверстие.
Ни тип "Т", ни тип "Функция" не могут быть назначены другому.
Вы можете заставить его с двойным утверждением:
let fn = this.value as any as Function;
Это описано здесь: https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html
Могу ли я использовать двойное утверждение с функциональным интерфейсом,
Конечно:
let value: number;
let fn = this.value as any as (input:string)=>any;
(input: T) => Test<T>
выше?