获取打字稿类作为接口

时间:2019-07-04 13:41:18

标签: typescript knockout.js typescript-typings

当尝试升级到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接口的任何方法吗?

2 个答案:

答案 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;
}