有一些方法可以为合并函数定义这样的接口:
interface mergeFunc<T, S, P exntends T,S>(t:T, s:S):P;
var merge:mergeFunc = function (t:any, s:any):any {
var res = {};
for (let x in t) res[x] = t[x];
for (let x in s) res[x] = s[x];
return res;
}
答案 0 :(得分:2)
在TypeScript 1.6(或今天每晚使用TypeScript,使用npm install typescript@next
)中,您将能够使用交集类型来编写此代码:
declare function mergeFunc<T, S>(t:T, s:S): T & S;
答案 1 :(得分:0)
对于T
的不可变更改如果您只需要合并与初始类型兼容的属性,那么从TypeScript 1.8开始,您可以使用类型parameters as constraints:
const merge = function<T extends S, S>
( t: T, s: S ) : T {
const res: any = {}
// copy
for ( const k in t ) {
if ( t.hasOwnProperty ( k ) ) {
res [ k ] = t [ k ]
}
}
// merge
for ( const k in s ) {
if ( s.hasOwnProperty ( k ) ) {
res [ k ] = s [ k ]
}
}
return res
}