打字稿:箭头功能的通用功能类型/接口

时间:2020-04-22 22:42:53

标签: typescript generics types arrow-functions typescript-generics

好,我有以下情况:

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编译器平静下来。使用接口代替类型别名也不起作用。

注意:我不希望hashIHashFn<string>的实现,但也希望是通用的。

有没有一种方法可以在TypeScript中声明泛型函数类型或接口?

2 个答案:

答案 0 :(得分:1)

您实际上并没有使用通用参数做任何事情。

但这听起来像您想要一个泛型函数,而不是泛型类型别名。因此,将其保留在函数中,并保留类型别名。

type IHashFn = <T>(arg: T) => number;

const hash: IHashFn = (arg) => {
  return 42;
}

答案 1 :(得分:0)

您可以简单地使用IHashFn<any>。在预期IHashFn<string>的地方也可以使用。

如果您确实希望它仍然是通用函数类型,则可以执行以下操作:

type IHashFn<T = any> = <U extends T>(arg: U) => number;