首页 > 解决方案 > 条件类型在 TypeScript 中是如何工作的

问题描述

我在 TypeScript 中遇到了条件类型,并且在 TypeScript 中发现了许多关于其功能的模糊定义。

考虑以下条件类型作为示例:

type NonNullable<T> = T extends null | undefined ? never : T

let MyType : NonNullable<string | null>;

这篇文章是我在谷歌上用 TypeScript 搜索条件类型时的第一个结果。

它定义T extends U ? X : Y条件类型如下:

在人类语言中,这种条件类型如下所示:如果类型 T 可分配给类型 U,则选择类型 X;否则,选择类型 Y。

因此,将这个定义应用到我们的示例中,我可以说是 ( string | null) 可分配给null类型吗?答案是否定的,所以MyType应该是(string | null)。哪个是错的

此处的另一篇文章将其定义如下,这是有道理的:

条件类型允许您过滤掉联合类型的特定成员。

TT在这个定义中,编译器检查联合类型 T 中的每个可能的类型(让我们称之为),如果这个类型( TT)是可分配的,null或者undefined编译器在为 定义定义时将它们过滤掉MyType

这些是我的问题:

  1. 哪个定义是正确的?
  2. TypeScript 中的条件类型有更好的(和通用的)定义吗?

标签: typescript

解决方案


推荐阅读