Как я могу привести универсальный к исполняемой функции?

0

Учитывая следующий пример надуманного кода, где 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;

У меня есть полу-законный прецедент для него (можно добавить фон, если это необходимо), но я не могу не задаться вопросом, забиваю ли я квадратную привязку через круглое отверстие.

Теги:
generics

1 ответ

1
Лучший ответ

Ни тип "Т", ни тип "Функция" не могут быть назначены другому.

Вы можете заставить его с двойным утверждением:

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;
  • 0
    Интересно. Можно ли использовать двойное утверждение с интерфейсом функции, аналогично (input: T) => Test<T> выше?
  • 0
    @dvlsg конечно. Добавлено в ответ
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню