File tree Expand file tree Collapse file tree 1 file changed +17
-0
lines changed Expand file tree Collapse file tree 1 file changed +17
-0
lines changed Original file line number Diff line number Diff line change @@ -351,3 +351,20 @@ export let p: Person;
351351这使得这些工具能够获得与 TypeScript 编译器相同的内存和速度改进。
352352注释解析策略的新选项在 ` JSDocParsingMode ` 中进行了描述。
353353关于此拉取请求的更多信息,请参阅[ PR] ( https://github.com/microsoft/TypeScript/pull/55739 ) 。
354+
355+ ## 通过比较非规范化的交叉类型进行优化
356+
357+ 在 TypeScript 中,联合类型和交叉类型始终遵循特定的形式,其中交叉类型不能包含联合类型。
358+ 这意味着当我们在一个联合类型上创建一个交叉类型,例如 ` A & (B | C) ` ,该交叉类型将被规范化为 ` (A & B) | (A & C) ` 。
359+ 然而,在某些情况下,类型系统会保留原始形式以供显示目的使用。
360+
361+ 事实证明,原始形式可以用于一些巧妙的快速路径类型比较。
362+
363+ 例如,假设我们有 ` SomeType & (Type1 | Type2 | ... | Type99999NINE) ` ,我们想要确定它是否可以赋值给 ` SomeType ` 。
364+ 回想一下,我们实际上没有一个交叉类型作为源类型,而是一个联合类型,看起来像是 ` (SomeType & Type1) | (SomeType & Type2) | ... | (SomeType & Type99999NINE) ` 。
365+ 当检查一个联合类型是否可以赋值给目标类型时,我们必须检查联合类型的每个成员是否可以赋值给目标类型,这可能非常慢。
366+
367+ 在 TypeScript 5.3 中,我们查看了我们能够隐藏的原始交叉类型形式。
368+ 当我们比较这些类型时,我们会快速检查目标类型是否存在于源交叉类型的任何组成部分中。
369+
370+ 更多详情请参考[ PR] ( https://github.com/microsoft/TypeScript/pull/55851 ) 。
You can’t perform that action at this time.
0 commit comments