typescript手册目前没有关于箭头函数的内容。正常的功能 可以使用以下语法进行泛型: 例子:

function identity<T>(arg: T): T {
    return arg;
}

箭头函数的语法是什么?


当前回答

我喜欢使用这种类型的声明:

const identity: { <T>(arg: T): T } = (arg) => arg;

它允许在需要时为函数定义额外的道具,在某些情况下,它有助于使函数体相对于泛型定义更清晰。

如果你不需要额外的道具(命名空间之类的东西),它可以简化为:

const identity: <T>(arg: T) => T = (arg) => arg;

其他回答

我喜欢使用这种类型的声明:

const identity: { <T>(arg: T): T } = (arg) => arg;

它允许在需要时为函数定义额外的道具,在某些情况下,它有助于使函数体相对于泛型定义更清晰。

如果你不需要额外的道具(命名空间之类的东西),它可以简化为:

const identity: <T>(arg: T) => T = (arg) => arg;

添加多个依赖泛型类型的示例:

这个函数,转换为箭头函数,如下所示:

http.get = function <T = any, R = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R> {
            config.withCredentials = true;
            ....
          };

注意这里的扩展号代替了等号:

http.get = async <T extends any, R extends unknown = AxiosResponse<T>>(url: string, config?: AxiosRequestConfig): Promise<R> => {
            config.withCredentials = true;
            ...
          };

虽然使用extends{}的流行答案是有效的,而且比扩展任何答案都好,但它迫使T成为一个对象

const foo = <T extends {}>(x: T) => x;

为了避免这种情况并保持类型安全,可以使用extends unknown代替

const foo = <T extends unknown>(x: T) => x;

2021年,Ts 4.3.3

const useRequest = <DataType, ErrorType>(url: string): Response<DataType, ErrorType> 
   => {
      ...
   }

使用<T, extends{}>在试图传递null作为参数时抛出错误。我更喜欢使用<T,>,因为它解决了这个问题。我还不知道原因。但这对我很管用。