如何用 TypeScript 表示混合
How to represent mixins with TypeScript
我正在编写自定义 mixin 例程,它接受对象的可变参数:
type HasIndex = {[key:string]:any};
// type RetType = ?
const mixinAll = (...v: HasIndex[]): RetType => {
return v.reduce((a,b) => doMixing(a,b,new Set()), {});
});
所以我的问题是 - 如何表示 mixinAll
的 return 值?有没有办法用 TypeScript 表示混合类型?与对 Object.assign
.
执行相同操作非常相似
如果您查看 Object.assign 的定义,这几乎可以回答问题:
interface ObjectConstructor {
assign<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;
}
简而言之,使用 & 运算符创建交集类型 - 不幸的是,似乎无法创建比这更好的 finer-grained。
我正在编写自定义 mixin 例程,它接受对象的可变参数:
type HasIndex = {[key:string]:any};
// type RetType = ?
const mixinAll = (...v: HasIndex[]): RetType => {
return v.reduce((a,b) => doMixing(a,b,new Set()), {});
});
所以我的问题是 - 如何表示 mixinAll
的 return 值?有没有办法用 TypeScript 表示混合类型?与对 Object.assign
.
如果您查看 Object.assign 的定义,这几乎可以回答问题:
interface ObjectConstructor {
assign<T, U, V, W>(target: T, source1: U, source2: V, source3: W): T & U & V & W;
}
简而言之,使用 & 运算符创建交集类型 - 不幸的是,似乎无法创建比这更好的 finer-grained。