【问题标题】:TypeScript does not detect union type with an && operatorTypeScript 不使用 && 运算符检测联合类型
【发布时间】:2015-09-03 10:10:22
【问题描述】:

在下面的例子中 x 实际上是一个联合类型 'boolean | string' 但 TypeScript 认为它是一个字符串。这是一个错误还是我错过了什么?

var x:string = false && "foo";

【问题讨论】:

  • 当你说x 实际上是一个联合类型时......在你的问题中它显然是string 类型。除非我错过了什么?
  • 我将其声明为字符串类型,但希望 TS 推断出联合类型并引发错误。 @basarat 告诉我规范指定了行为,所以我现在明白了。

标签: typescript


【解决方案1】:

这是一个错误还是我错过了什么

这是设计使然。根据规范,&& 的推断类型是 last 表达式的类型。所以下面的推断类型是string

var x = false && "foo";

这是为了支持一个通用的 JavaScript 模式:

var something = foo && foo.bar && foo.bar.bas; 

如果something 的类型是foo.bar.bas,那就太好了,这正是打字稿推断的内容。

【讨论】:

  • 谢谢!让 && 始终是类型:'boolean |最后一个表达式的类型'似乎更正确,但如果它至少在规范中说明,那比错误更好。 :)
猜你喜欢
  • 2018-11-04
  • 2019-04-16
  • 2020-05-26
  • 1970-01-01
  • 2019-12-26
  • 1970-01-01
  • 2023-03-25
  • 2021-10-27
  • 2020-04-14
相关资源
最近更新 更多