【问题标题】:Error with Typescript const string comparisonTypescript const 字符串比较出错
【发布时间】:2018-06-25 12:01:51
【问题描述】:

这实际上是在阻止我的 Angular 应用程序运行。这是一个派生示例,我设置的const 只是为了测试函数中的一些值,所以有一些方法可以解决这个问题,但我想知道发生了什么似乎很奇怪。

以下代码给出了 tslint 错误 Type '"Red"' is not comparable to type '"Green"'. Happens with if statements as well.

const color = 'Red'

switch(color) {
  case 'Red':
    //do something
  case 'Green':
    //something else
}

为什么它使用字符串作为类型?为什么我不能将 const 字符串变量与字符串进行比较?这似乎是一个错误。

【问题讨论】:

标签: string typescript constants tslint


【解决方案1】:

Typescript 有literal types,一种表示单个值的类型。常量类型将被推断为表示分配给它们的值的文字类型。因此,当您声明 const color = 'Red' 时,color 的类型实际上将是字符串文字类型 'Red' 而不是 string 类型。

Typescript 这样做是为了尽可能多地检查您的代码。在这种情况下,如果您考虑一下,则无法从该代码中达到Green 的情况,因此该代码可能存在一些无效的地方(我们通常不想编写死代码)。

如果您希望常量的类型只是string,您可以手动键入常量:

const color: string = 'Red'; 

【讨论】:

  • 出现此错误 - [tslint] 从字符串文字中简单推断的类型字符串,删除类型注释(无推断类型)
  • @j1s 我能说什么 .. tslint 错了 .. 肯定会推断出它,但会推断出你不想要的其他东西……我总是用 tslint 警告一粒盐,它们可能是错误的,但并非总是如此,我认为如果您真的希望 const 是字符串而不是字符串文字类型,那么您可以抑制这一点..
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 2013-03-23
  • 2014-11-28
  • 2020-11-30
  • 1970-01-01
相关资源
最近更新 更多