我想在一个接口中具有多个呼叫签名,以便它们具有不同的通用参数
interface GenericIdentityFn {
<T>(arg: T): T;
<T, F>(arg1: T, arg2: F): [T, F];
}
function identity<T>(arg: T): T {
return arg;
}
// error: duplicate definition
function identity<T, F>(arg1: T, arg2: F): [T, F] {
return [arg1, arg2];
}
let myIdentity: GenericIdentityFn = identity;
console.log(myIdentity("hello"));
答案 0 :(得分:3)
一个函数不能有多个实现。您可以有一个具有多个签名的函数,但是可以有一个实现,在实现中由您自己确定被调用的签名。
如果您定义具有多个重载的函数,则可以将其分配给GenericIdentityFn
接口
interface GenericIdentityFn {
<T>(arg: T): T;
<T, F>(arg1: T, arg2: F): [T, F];
}
function identity<T>(arg: T): T;
function identity<T, F>(arg1: T, arg2: F): [T, F]
function identity<T, F>(arg1: T, arg2?: F): T | [T, F] {
return typeof arg2 === 'undefined' ? arg1 : [arg1, arg2];
}
let myIdentity: GenericIdentityFn = identity;
console.log(myIdentity("hello"));