繁体   English   中英

动态类方法的打字稿类型

[英]typescript type of dynamic class methods

我正在尝试构建一个在构造函数阶段构建一些动态方法的类,一切正常,但是 VS Code 自动建议不适用于动态方法? 我们应该怎么做? 这是代码沙盒

我也试过interface但仍然没有运气

export default class A {
  private version = 1;
  get getVersion() {
    return this.version;
  }
  private actions = ["approve", "edit", "delete"];
  constructor() {
    this.actions.forEach(
      method =>
        (A.prototype[method] = route => {
          console.warn(method + " called");
        })
    );
  }
}

const B = new A();
console.warn(B.getVersion);
console.warn(B.approve()) // auto suggestion not available here  

你可以这样做......但它真的很hacky。 像这样的元编程不可能完全进行类型检查。 这是带有此解决方案的游乐场

首先,告诉 TS 动作是一个常量数组,以便它可以缩小类型。

private actions = ["approve", "edit", "delete"] as const;

接下来,创建一个映射类型,用于描述您的forEach方法向该类型添加的内容。

type _A = {
    [K in A['actions'][number]]: (route: string) => void
}

请注意,这必须是一个type 它不能是一个interface

最后,添加一个扩展此类型别名的接口。 我希望 TS 在这里对我大喊大叫,但显然这没问题。

export default interface A extends _A {
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM