如何使用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
}
很清楚,当我向MyModel添加implements Spec
时,它无法完成这项工作:
class MyModel extends Model<Spec, keyof Spec> implements Spec {
// id: number -- implicit
}
因为我得到错误Property 'id' is missing in type 'MyModel'
。
我并不担心将接口属性保留为未初始化,因为总是可以从构造函数中完成。我所处理的过多接口是更大的噩梦。
注意:我使用底层JS模块来填充规范属性,因此如果没有提供声明,编译器就不会抱怨。
答案 0 :(得分:2)
您可以这样做来声明一个类包含接口的所有成员:
class MyModel {
// usual stuff
}
interface MyModel extends Spec { /* don't need to write anything here */ }
此功能称为声明合并。