好吧,我有以下方案。
type IHashFn = (arg: string) => number;
const hash: IHashFn = (arg) => {
return 42;
}
到目前为止,一切正常 现在我希望函数是通用的。
const hash: <T> (arg: T) => number = (arg) => {
return 42;
}
这样就可以了。但是这个不行。
type IHashFn<T> = (arg: T) => number;
const hash: <T> IHashFn<T> = (arg) => {
return 42;
}
我没有办法让TS编译器平静下来。使用接口代替类型别名也不行。
注意:我不想让 hash
落实到 IHashFn<string>
但也是通用的。
有没有办法在TypeScript中声明通用函数类型或接口呢?
你并没有真正使用你的通用参数做任何事情。
但听起来你想要的是一个通用函数,而不是通用类型别名。所以把它留在函数上,而不要放在类型别名上。
type IHashFn = <T>(arg: T) => number;
const hash: IHashFn = (arg) => {
return 42;
}
你可以简单地使用 IHashFn<any>
. 在以下情况下可以使用 IHashFn<string>
也是我们所期望的。
如果你真的希望它仍然是一个通用函数类型,你可以做这样的事情。
type IHashFn<T = any> = <U extends T>(arg: U) => number;