【问题标题】:Assigned expression type "X" is not assignable to type "X" | "Y"分配的表达式类型“X”不能分配给类型“X”| “是”
【发布时间】:2019-10-30 16:04:55
【问题描述】:

我从 Angular 模板中收到此错误:

分配的表达式类型“default”不能分配给类型“default” | “删除” | “重命名”`

在一行写着currentAction = 'default':

但是我的currentAction 变量是这样声明的:

type Action = 'default' | 'delete' | 'rename';
public currentAction: Action = 'default';

所以我认为分配它是有效的,因为default 是一个有效值。

如果我在我的组件类(而不是模板)中执行类似操作,则不会出现警告或错误:

this.currentAction = 'default'

这看起来像是我的 IDE (WebStorm) 的错误,还是在 Angular 模板中分配该变量有问题?

【问题讨论】:

  • 可能,检查here工作正常
  • 感觉是WebStorm的bug,否则html中也可以使用union类型。更好的是,您可以在单击时调用方法并将其分配到那里。为什么要冒险。

标签: angular typescript webstorm


【解决方案1】:

这是 IDE 中的一个错误,已在即将发布的 2019.2 中修复。 请尝试2019.2 EAP - 它似乎在那里工作正常:

【讨论】:

    【解决方案2】:

    行为是正确的,因为类型可以更改,这就是为什么 IDE 不能确定字符串值 'default' 将来是否适合该类型。

    在这种情况下最好使用enums,因为您可以使用值并毫无问题地更改它:

    enum Action {
        DEFAULT = 'default',
        DELETE = 'delete',
        RENAME = 'rename'
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-27
      • 1970-01-01
      • 2020-08-25
      • 2016-04-16
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      相关资源
      最近更新 更多