我有这段代码:
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
的选项对象。
我的问题是:如何通过为类和选项对象接口声明完全相同的字段来避免重复自己?
您无法扩展接口。实现接口并不意味着您继承接口的字段。
我应该声明一个类型而不是一个接口吗?
答案 0 :(得分:3)
您是正确的,因为您无法扩展接口并且实现接口需要您再次写出属性。虽然此解决方案改变了类的结构,但一种方法是使用接口类型在类上创建属性。
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
}
}
答案 1 :(得分:2)
我经常使用以下内容:
export class Pool {
// ...
constructor(initializer?: Partial<Pool>) {
if (initializer) {
Object.assign(this, initializer)
}
}
}
当然,这假设该类具有与假定的初始化对象相同的属性,因此这与C#中的对象初始化非常相似。如果您还要将实例成员初始化为有意义的默认值,则此方法效果最佳。
答案 2 :(得分:0)
2020 年更新
现在可以用最少的样板做你想做的事:
N = 5;
typp = "b";
mu = 2;
function bigfun()
function f(u,mu)
ee = mu*u;
return ee
end
function g(uv,mu)
ee = (mu^2)*uv
return ee;
end
while 1 == 1
u = ones(N);
if typp == "a"
ff(u) = f(u,mu);
elseif typp == "b"
ff(u) = g(u,mu);
end
fu = ff(u);
break;
end
end
bigfun();
https://github.com/Microsoft/TypeScript/issues/340#issuecomment-184964440