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

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

箭头函数的语法是什么?


当前回答

这里我有2个带泛型的箭头函数:

直接呼叫:

const foo = <T>(value: T): void => {
    console.log(value);
foo('hello') // hello
}

创建一个稍后使用的类型:

type TFoo<S> = (value: S) => boolean;
const foo: TFoo<number> = (value) => value>0;
console.log(foo(1)) // true
console.log(foo(-1)) // false

希望这对你有所帮助!

其他回答

如果你在.tsx文件中,你不能只写<T>,但这是可行的:

const foo = <T, >(x: T) => x;

与extends{}攻击不同,这种攻击至少保留了意图。

我知道我回答这个问题有点晚了。但我想到了回答这个问题,以防其他人发现它有帮助。没有一个答案提到如何在异步箭头函数中使用泛型。

是这样的:

const example = async <T> (value: T) => {
    //awaiting for some Promise to resolve or reject;
     const result = await randomApi.getData(value);

} 

我觉得上面的例子令人困惑。 我正在使用React和JSX,所以我认为它使场景复杂化。

我从TypeScript Deep Dive中得到了澄清,它声明了箭头泛型:

解决方法:在泛型参数上使用扩展来提示编译器它是一个泛型,这来自一个更简单的例子,帮助了我。

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

非箭头函数的方法。扩展OP中的例子。

function foo<T>(abc: T): T {
    console.log(abc);
    return abc;
}

const x = { abc: 123 };
foo(x);

const y = 123;
foo<number>(y);

除了把整个事情嵌入到一个语句中的答案之外:

const yar = <T,>(abc: T) => {
    console.log(abc);
    return abc;
}

另一种方法是使用中间类型:

type XX = <T>(abc: T) => T;

const bar: XX = (abc) => {
    console.log(abc);
    return abc;
}

操场上

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

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

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;
            ...
          };