这里通过五个示例逐步理解泛型调用和函数调用签名
interface IFnCall {
(name: string, age: number): string
}
const foo: IFnCall = function (name, age) {
return name + age
}
foo('tom', 10)
interface IFnCall2 {
(fn: () => string, age: number): string
}
const foo2: IFnCall2 = function () {
return ''
}
foo2(() => {
return ''
}, 10)
interface IFnCall3 {
<MyType>(fn: () => MyType, age: number): string
}
const foo3: IFnCall3 = function () {
return ''
}
foo3<number>(() => {
return 11
}, 10)
foo3<number>(() => {
return 11
}, 10)
foo3(() => {
return 11
}, 10)
interface IFnCall4 {
<MyType>(fn: () => MyType, age: number): MyType
}
const foo4: IFnCall4 = function (fn) {
return fn()
}
foo4<number>(() => {
return 11
}, 10)
interface IFnCall5<IRoot> {
<MyType>(fn: (name: IRoot) => MyType, age: number): MyType
}
const foo5: IFnCall5<string> = function (fn) {
return fn('Tom')
}
const res = foo5((name) => {
return name
}, 10)
console.log(res)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)