几天前我在 TypeScript 论坛上问过这个问题,但没有得到回复,所以我想我应该在这里尝试一下。
https://typescript.codeplex.com/discussions/447628
typeScript 0.9 规范说
The && operator permits the operands to be of any type and produces a result of the same type as the second operand.
对于 false && "123"
来说,这显然是错误的,即false
,它不是字符串。
有人可以对此发表评论吗?
编辑链接的问题不是解释,而是友好的挥舞 ARM 。规范。包含一个无法证明其合理性的正式错误。也就是说,类型规则应该根据表达式的自由变量来解释表达式的所有值的类型。规范。在这一点上显然是错误的。我认为以下任何一个都可以回答我的问题:
- 来自规范的理由。为什么我应该考虑
false
成为string
; - 指向规范中位置的指针。它说 TypeScript 的类型系统不健全(在这种情况下,有什么意义?);或
- 承认我的观点是有效的,并表明我应该与谁交谈以获得规范。已修复。
最佳答案
从 typescript 编译器看来,规范是正确的。
例如:
var foo = false && "asdf"
推断 foo 的类型是“string”。
将鼠标悬停在 TypeScript playground 中的 foo 上即可看到它.
这是一个不正确的假设。但实际上没有办法确定实际类型是什么(例如,当链中有函数调用时,甚至是any)。在这方面, typescript 假设开发人员知道他在做什么,并且最后一个是他真正想要使用的。
关于typescript - && 和 || 是 TypeScript 类型规范正确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17227837/