Hen*_*uno 6 typescript typescript-generics
代码解释了我的问题:
type A = {
a: number,
} | null
// Extract as defined in lib.es5.d.ts
type Extract<T, U> = T extends U ? T : never;
type CustomExtract = A extends null ? A : never;
type Result1 = Extract<A, null> // null
type Result2 = CustomExtract; // never
Run Code Online (Sandbox Code Playgroud)
Extract 和 CustomExtract 是相同的代码,不同之处在于 Extract 是泛型类型。
另外,作为相关示例,string | null不扩展null.
那么,在这个主题中,类型到底是如何工作的呢?我可以想象它可能会为每种类型的联合运行通用类型,然后将所有结果联合起来,但我想要真正的技术定义和工作原理。
区别在于 thatExtract是分配条件类型,而 yourCustomExtract不是。
为了使形式的条件类型X extends Y ? A : B具有分布式功能,检查的类型X必须是“裸类型参数”;也就是说,像in和那样的类型参数是裸露的,因为它只是被检查的类型参数(即),而不仅仅是包含类型参数的某些表达式(例如或)。Tinterface Foo<T> {...}T extends ...Promise<T> extends ...[T] extends ...
正如您所猜测的,分布式条件类型确实评估为检查类型的每个联合元素的条件的并集T。因此 ifF<T>是分配条件类型,那么F<A | B | C>将被评估为F<A> | F<B> | F<C>。一个潜在的问题是,无论细节是什么(只要它是分布式的),F<never>都会被评估,因为被认为是“空联合类型”。neverFnever
有关更多信息,请参阅我的其他答案,了解什么是分布式条件类型以及它们如何工作。
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |