gpt4 book ai didi

typescript - 为什么 `type T1 = undefined & {}` 从不出现在 Typescript 中?

转载 作者:行者123 更新时间:2023-12-05 09:01:11 26 4
gpt4 key购买 nike

我在 TypeScript 文档中查找了它。

文档说 NonNullable 排除 null 或 undefined

type NonNullable<T> = T & {};

为什么 undefined & {}never

https://www.typescriptlang.org/docs/handbook/utility-types.html#nonnullabletype

最佳答案

如果你有两种类型,A , 和 B , 然后是 intersection type A & B对应于两者 A 的所有值 B同时。

empty object type {} 对应于您可以索引到而不会出现运行时错误的任何类对象值。所以所有对象类型都可以分配给 {} ,以及大多数原始类型,如 string (因为 string 具有类似 toUpperCase 的明显属性)。唯一不能分配给 {} 的值是 nullundefined .所以你可以想到{}作为“除 nullundefined 之外的任何内容”。

因此,类型 undefined & {}在概念上对应于所有值都是 undefined和“除 nullundefined 之外的任何内容”。但是没有适合的值,所以,至少在概念上,undefined & {}是空交集,应该等同于 the impossible never type没有值。

在实践中,有时 TypeScript 不会立即将空交集减少为 never .但是任何涉及至少一种基本类型的空交集,如 undefined确实会如此减少,如 microsoft/TypeScript#31838 中实现的那样.所以undefined & {}never .


请注意 the NonNullable<T> utility typeas of TypeScript 4.8被重新定义为 T & {} .因为{}是“除 nullundefined 之外的所有内容”,然后在概念上是 T 的交集与 {}将产生类似 T 的类型与 nullundefined从中删除。

从这个角度来看,NonNullable<undefined>NonNullable<null>应该是 never ,因为您正在从自身中移除一些东西并且什么都没有留下。

关于typescript - 为什么 `type T1 = undefined & {}` 从不出现在 Typescript 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73903600/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com