DRY与打字稿和构造函数选项对象
我有这样的代码:DRY与打字稿和构造函数选项对象
export interface LDAPPoolOpts {
id: number;
size: number;
connOpts: any;
active: Array<any>;
inactive: Array<any>;
dn: string;
pwd: string;
waitingForClient: Array<Function>
}
export class Pool {
id: number;
size: number;
connOpts: any;
active: Array<any>;
inactive: Array<any>;
dn: string;
pwd: string;
waitingForClient: Array<Function>;
constructor(opts: LDAPPoolOpts) {}
}
,你可以看到构造该类只是需要一个选项与类型的对象:LDAPPoolOpts
。
我的问题是:如何避免重复自己必须为类和选项对象接口声明完全相同的字段?
您不能扩展接口..并且实现接口并不意味着您继承了接口的字段。
我应该声明一个类型而不是接口吗?
你是正确的,你不能扩展接口,实现接口要求你再次写出属性。尽管这个解决方案改变了你的类的结构,但是一种方法是在类中使用接口类型创建一个属性。
export interface LDAPPoolOpts {
id: number;
size: number;
connOpts: any;
active: Array<any>;
inactive: Array<any>;
dn: string;
pwd: string;
waitingForClient: Array<Function>
}
export class Pool {
opts: LDAPPoolOpts;
constructor(opts: LDAPPoolOpts) {
this.opts = opts; // assign to the property how you see fit
}
}
我经常使用的是以下几点:
export class Pool {
// ...
constructor(initializer?: Partial<Pool>) {
if (initializer) {
Object.assign(this, initializer)
}
}
}
这当然,假定类具有相同的属性应该初始化对象,所以这基本上是非常相似的对象初始化在C#中。如果您还将实例成员初始化为有意义的默认值,则此方法效果最佳。
谢谢,你能解释一下参数
@AlexanderMills'部分
是的,这可能是一个很好的解决方案,将清理一些东西。绝对恼人的是必须在两个不同的地方保留相同的确切属性列表。 –