如何在TypeScript接口中定义合并功能?

时间:2015-08-04 10:00:21

标签: typescript

有一些方法可以为合并函数定义这样的接口:

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;
}

2 个答案:

答案 0 :(得分:2)

在TypeScript 1.6(或今天每晚使用TypeScript,使用npm install typescript@next)中,您将能够使用交集类型来编写此代码:

declare function mergeFunc<T, S>(t:T, s:S): T & S;

请参阅https://github.com/Microsoft/TypeScript/pull/3622

答案 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
}