当尝试升级到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{...}
那么将Class转换为ViewModelFunction接口的任何方法吗?
答案 0 :(得分:1)
const viewModel: ViewModelFunction = params => new MyClass(params);
答案 1 :(得分:0)
您可以将doSomething
和公共foobar
移至某个接口,并具有一个创建可同时实现该接口和ViewModelFunction
的对象的功能。
interface ViewModelFunction {
(params?: any): any;
}
interface MyClass {
foobar: string;
doSomething(): number;
}
interface MyF extends MyClass, ViewModelFunction {}
function getMyF(foobar: string): MyF {
const res = () => {yourViewModel();};
res.foobar = foobar;
res.doSomething = () => foobar.length;
return res;
}