Typescript 是&;的类型脚本类型规范&;而且| |正确吗?

Typescript 是&;的类型脚本类型规范&;而且| |正确吗?,typescript,Typescript,几天前,我在TypeScript论坛上问了这个问题,但没有得到回复,所以我想我应该在这里试试 TypeScript0.9规范说 &&运算符允许操作数为任何类型,并生成与 第二个操作数 这显然是错误的,比如说,false&&“123”,它是false,它不是字符串 有人能对此发表评论吗 编辑链接的问题不是解释,而是友好地挥动手臂。规范包含一个形式错误,它不能证明这一点。也就是说,类型规则应该根据自由变量解释表达式的所有值的类型。在这一点上,规范显然是错误的。我会考虑以下任何一个对我的问题的回答:

几天前,我在TypeScript论坛上问了这个问题,但没有得到回复,所以我想我应该在这里试试

TypeScript0.9规范说

&&运算符允许操作数为任何类型,并生成与 第二个操作数

这显然是错误的,比如说,
false&&“123”
,它是
false
,它不是字符串

有人能对此发表评论吗

编辑链接的问题不是解释,而是友好地挥动手臂。规范包含一个形式错误,它不能证明这一点。也就是说,类型规则应该根据自由变量解释表达式的所有值的类型。在这一点上,规范显然是错误的。我会考虑以下任何一个对我的问题的回答:

    <> LI>从我为什么要考虑<代码>伪<代码>的代码中得到的理由是<代码>字符串 >;<李>
  • 一个指向规范中哪里的指针。它表示TypeScript的类型系统不健全(在这种情况下,有什么意义?);或
  • 接受我的观点是有效的,并表明我应该与谁谈话以修复规范

从typescript编译器的角度来看,规范是正确的

e、 g:

var foo = false && "asdf"
为foo推断的类型为“string”

如果你将鼠标悬停在foo上,你可以看到它


这有点不正确。但实际上无法确定实际的类型是什么(例如,当链中有函数调用时,甚至是any)。在这方面,typescript假设开发者知道他在做什么,最后一个是他真正想要使用的

这是打字脚本设计者的错误。两种任意类型的最小上界是
any
。类型系统的要点是,它应该完全指定给定表达式可以具有的值族。在这种情况下,类型规则(和编译器实现)显然都是错误的。