typescript - 条件类型在 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
。
这些是我的问题:
- 哪个定义是正确的?
- TypeScript 中的条件类型有更好的(和通用的)定义吗?
解决方案
推荐阅读
- java - 如何在不阻塞当前代码路径的情况下获取ExecutorService的执行结果?
- git - 你能定义文件的哪些部分应该在 git 提交中被视为已更改吗?
- flutter - 如何实现简单的弹出指南,如附图所示
- mongodb - Logstash mutate 删除字段名称'JSON'
- javascript - 将sql数据转换为json文件时如何去掉方括号
- android - 使用 SensorEvent 增加和减少动画和声音
- c++ - 帮助理解复制构造函数
- excel - 如何在粘贴信息和签名后放置正文?
- java - 通过确保实体存在来更新实体的最佳方法是否是 Spring Data JPA 中 getOne() 和 save() 的组合?
- read-the-docs - 是否可以为我的文档创建讨论页面?