poc*_*sar 9 interface typescript
我有一个包含80多个方法的类,每个方法都接受一个包含一些已定义接口的对象.
class Stuff {
/* many more */
getAccount(req: IAccount, callback: ICallback) {
return this._call('getAccount', req, callback);
}
getIds(req: IIDs, callback: ICallback) {
return this._call('getIds', req, callback);
}
/* many more */
}
Run Code Online (Sandbox Code Playgroud)
非常'无聊'的东西,因为它只是映射到底层_call方法,并使每种方法的类型安全.
但有时这些reqparam对象是由2个或更多接口组成的,而不是每次创建另一个接口都有"尴尬",如下所示:
export interface ILoled extends IAccount {
loled: boolean;
}
export interface IRofloled extends ILoled {
rofled: boolean;
}
class Stuff {
getLols(req: ILoled){
}
getRofls(req: IRofloled){
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法我可以把它作为方法参数列表中的接口的"内联"混合?喜欢(显然不起作用):
class Stuff {
getMoreStuff(req: <{} extends IAccount, ITime>) {
}
}
Run Code Online (Sandbox Code Playgroud)
Jas*_*onS 13
是的,你可以使用Typescript 1.6.称为交叉点类型,使用&运算符组合类型.
function extend<T, U>(first: T, second: U): T & U {
let result = <T & U> {};
for (let id in first) {
result[id] = first[id];
}
for (let id in second) {
if (!result.hasOwnProperty(id)) {
result[id] = second[id];
}
}
return result;
}
var x = extend({ a: "hello" }, { b: 42 });
x.a; // works
x.b; // works
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |