这篇文章是帮大家学习如何在条件类型中提取和使用类型。
理解 infer 关键字
有一个 infer 关键字可以在条件类型的条件中使用,以将推断的类型放入变量中。 然后可以在条件分支中使用该推断变量。考虑下面的简单示例,如果类型是数组,则给出数组元素类型:
构造 item1 时,条件类型中的条件为真,因为 number[] 匹配 (infer E)[]。 因此,在此匹配过程中,E 被推断为数字。 返回条件的第一个分支 E,它被解析为数字。
构造 item2 时,条件类型中的条件为 false,因为 {name: string} 不匹配 (infer E)[]。 因此返回条件的第二个分支 T,即传入的原始参数 {name: string}。
更复杂的例子
我们将在下面的代码编辑器中使用 infer 关键字创建一个条件类型。
该代码包含两个返回不同对象的函数。 该代码还包括这两个函数的类型。
我们将创建一个名为 FunctionReturnType 的实用程序类型,它将给出函数的返回类型,最终将使用 FunctionReturnType 创建一个由两个函数的返回类型组成的联合类型。
type FunctionReturnType
type FunctionReturnType = T extends (...args: any) => infer R
我们的条件是传入的类型与函数签名匹配。 我们已经推断出要将函数的返回类型放入 R 参数中。
type FunctionReturnType = T extends (...args: any) => infer R ? R : T;
如果条件为真,则返回 R 参数,这是函数的返回类型。 如果条件为假,则返回传入的原始类型 T。
Actions现在跟下面的类型是一样的:
不错吧。现在试着给 FunctionReturnType 传入一个对象:
现在那个 PersonType 类型就是对象本身的签名。
总结:
infer 关键字允许从条件类型的条件中提取类型。 这通常在 Typescript 的标准实用程序类型中使用。
留言与评论(共有 0 条评论) “” |