gpt4 book ai didi

typescript - 为什么任何扩展 X ? : B give A | B in typescript?

转载 作者:行者123 更新时间:2023-12-04 11:27:50 24 4
gpt4 key购买 nike

type TestAny = any extends 'a' ? 1 : 2 // => 1 | 2  why??? how to understand?
type TestUnknown = unknown extends 'a' ? 1 : 2 // => 2
type TestStringA = 'a' extends 'a' ? 1 : 2 // => 1

type SomeUnion = 'a' | 'b'
type UnionDistribute<T> = T extends 'a' ? 1 : 2
type t0 = UnionDistribute<SomeUnion> // => 1 | 2 // any work like an union
为什么 any extends 'a' ? 1: 21 | 2 ,这项工作作为一个工会。我试图谷歌找到一些解释但失败了。
palyground

最佳答案

microsoft/TypeScript#40049对于这个问题的权威答案,尽管在我看来它并没有说明根本原因。
具体this comment :

@jack-williams commented on Aug 14, 2020:

This isn't especially well-documented outside of the source-code, but in the checker you'll find in the relevant place:

// Return union of trueType and falseType for 'any' since it matches anything
if (checkType.flags & TypeFlags.Any) {

So any is treated like a wildcard that matches both branches.


Currently你可以在第 15239 行找到代码(GitHub 不会让你链接到这么大的文件中的特定行),它是在 this commit 中引入的。内 microsoft/TypeScript#21316 ,实现了 conditional types 的拉取请求首先。所以只要条件类型存在,就一直是这样。
这是您最接近“为什么”发生这种情况的原因。官方回答是“因为它匹配任何东西”。

关于typescript - 为什么任何扩展 X ? : B give A | B in typescript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68754652/

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