[英]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.