【发布时间】:2018-06-20 04:03:24
【问题描述】:
如何使用 Typescript 中的接口属性扩展类?我意识到这必然会使属性未初始化。
我的唯一目的是减少代码冗余。出现在接口中的属性声明将相同地出现在每个类实现中。我宁愿只从界面集中维护这些属性。
我想写一些类似下面的东西,但这是错误的谜语:
interface Spec {
id: number;
}
class Model<S> {
[K extends keyof S: string]: S[K];
}
class MyModel extends Model<Spec> {
// id: number -- implicit
}
相反,我发现自己能够写这个,它可以构建但不能完成工作:
interface Spec {
id: number;
}
class Model<S, K extends keyof S> {
[K: string]: S[K];
}
class MyModel extends Model<Spec, keyof Spec> {
// id: number -- implicit
}
很明显,当我将implements Spec 添加到 MyModel 时,它不起作用:
class MyModel extends Model<Spec, keyof Spec> implements Spec {
// id: number -- implicit
}
因为那时我得到了错误,Property 'id' is missing in type 'MyModel'。
我不担心让接口属性未初始化,因为这总是可以从构造函数中完成。我正在处理的过多接口是更大的噩梦。
注意:我使用底层 JS 模块来填充规范属性,因此如果未提供它们的声明,编译器不一定会抱怨。
【问题讨论】:
标签: typescript typescript-typings typescript-generics