При попытке обновить до TypeScript 3.5 я столкнулся с проблемой с сигнатурой, которая по какой-то странной причине игнорировалась ts-компилятором, но была там годами.
Фреймворк стороннего производителя (knockoutJS) требует, чтобы я передал что-то, что соответствует этому:
interface ViewModelFunction {
(params?: any): any;
}
Очевидно, во время выполнения это работает с выполнением чего-то вроде этого:
class MyClass {
public foobar: string;
constructor(params: { foo: string; bar: number }) {
this.foobar = params.foo + params.bar;
}
public doSomething = () => {
return this.foobar.length;
}
}
, а затем отправка MyClass в функцию, которая требуетViewModelFunction как атрибут.Поскольку код работает, в основном это проблема машинописи.Хотя это загадка (но не важно, почему), что ts3.5 неожиданно замечает это, ни одна версия машинописного текста не будет принимать что-то вроде
class MyClass implements ViewModelFunction{...}
Так есть ли способ преобразования класса в интерфейс ViewModelFunction?