There are some way to define such interface for merge function:
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;
}
?