如何读取带有多个箭头和泛型的 TypeScript 签名?

问题描述

我正在尝试从 react-hook-forms 中理解这个 TypeScript 签名:

handleSubmit: <TSubmitFieldValues extends FieldValues = TFieldValues>(onValid: SubmitHandler<TSubmitFieldValues>,onInvalid?: SubmitErrorHandler<TFieldValues>) => (e?: React.BaseSyntheticEvent) => Promise<void>;

特别是,但不仅仅是我想了解:

  1. 泛型类型中的等号是什么意思?

    <TSubmitFieldValues extends FieldValues = TFieldValues>

  2. 签名里怎么会有两个箭头?

    [removed for shortening] => (e?: React.BaseSyntheticEvent) => Promise<void>

如果有人能一步一步解释签名就好了,谢谢!

解决方法

泛型中的等号是什么意思?

这是默认类型。

签名里怎么会有两个箭头?

这是一个返回另一个函数的函数。例如这个函数:

const myWeirdAdd = arg1 => arg2 => arg1+arg2;

我们可以这样称呼吗:

myWeirdAdd(1)(2); // returns 3;

它的类型是:

type CurriedAdd = (arg1: number) => (arg2: number) => number;