Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
条件类型在TypeScript中是如何工作的_Typescript - Fatal编程技术网

条件类型在TypeScript中是如何工作的

条件类型在TypeScript中是如何工作的,typescript,Typescript,我在TypeScript中遇到了条件类型,并且我在TypeScript中发现了许多关于其功能的模糊定义 以以下条件类型为例: type NonNullable<T> = T extends null | undefined ? never : T let MyType : NonNullable<string | null>; type nonnull=T扩展null |未定义?从不:T 让MyType:不可为空; 是我在google上搜索TypeScript中的条

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

以以下条件类型为例:

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

let MyType : NonNullable<string | null>;
type nonnull=T扩展null |未定义?从不:T
让MyType:不可为空;
是我在google上搜索TypeScript中的条件类型时的第一个结果

它定义了
T扩展U?X:Y
条件类型如下:

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

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

另一篇文章对它的定义如下:

使用条件类型可以筛选出联合的特定成员 类型

在此定义中,编译器检查联合类型T中的每个可能类型(称之为
TT
),如果此类型(
TT
)可分配给
null
undefined
编译器会在定义
MyType
时过滤掉它们

以下是我的问题:

  • 哪个定义是正确的
  • TypeScript中的条件类型有更好的(通用的)定义吗

  • 也许这有助于理解。单独查看联合类型
    string | null
    ,可以将其视为
    不可为null |不可为null
    ,因此我们得到与
    string
    相同的
    string