从接口扩展 Typescript class
Extend a Typescript class from an interface
如何使用 Typescript 中的接口属性扩展 class?我意识到这必然会使属性未初始化。
我的唯一目的是减少代码冗余。接口中出现的 属性 声明将完全相同地出现在每个 class 实现中。我宁愿只从界面集中维护这些属性。
我想写类似下面的东西,但这是错误的谜语:
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 模块来填充规范属性,因此如果未提供它们的声明,编译器不一定会报错。
您可以这样做来声明一个 class 具有接口的所有成员:
class MyModel {
// usual stuff
}
interface MyModel extends Spec { /* don't need to write anything here */ }
此功能称为声明合并。
如何使用 Typescript 中的接口属性扩展 class?我意识到这必然会使属性未初始化。
我的唯一目的是减少代码冗余。接口中出现的 属性 声明将完全相同地出现在每个 class 实现中。我宁愿只从界面集中维护这些属性。
我想写类似下面的东西,但这是错误的谜语:
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 模块来填充规范属性,因此如果未提供它们的声明,编译器不一定会报错。
您可以这样做来声明一个 class 具有接口的所有成员:
class MyModel {
// usual stuff
}
interface MyModel extends Spec { /* don't need to write anything here */ }
此功能称为声明合并。