【问题标题】:Cannot assign to 'Boolean' because it is a constant or a read-only property无法分配给“布尔”,因为它是常量或只读属性
【发布时间】:2017-06-08 01:13:14
【问题描述】:

我正在创建一个打字稿对象来表示我的应用程序中的读/写权限,但是我在分配对我没有意义的变量时遇到了这个怪癖。希望有人可以看看这个并告诉我我做错了什么。

export class Permission {
       watcher:Object =  { read:Boolean = true};
}

前面的代码导致错误提示:

[ts] 无法分配给“布尔”,因为它是常量或只读属性。 const Boolean: BooleanConstructor

我可能只是在做一些愚蠢的事情,所以如果这是超级新手,请提前道歉。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    如果您打算将watcher 属性键入为具有read 属性的对象,则应键入如下内容:

    export class Permission {
      // The part after the ":" is the type definition of the property. 
      // The part after "=" is its value
      watcher: { 
        read: boolean
      } = { read: true };
    }
    

    您目前所拥有的可能是语法错误。您可能不想用Boolean = true 覆盖内置构造函数Boolean

    【讨论】:

      【解决方案2】:

      您正在尝试使用 { read: true } 分配 JSON 对象,将其声明为布尔类型只是多余的(因为 truefalse 始终为布尔值)打字稿推断类型,这是一个无效的 JSON 结构。

      JSON 有这种格式:

      {
        key: value,
        key2: value2
      }
      

      请注意,JSON 中没有等号 (=),只有 : 来分隔键和值。

      现在我看到类语法让你感到困惑,因为它确实有一个等号,但它只用于赋值。赋值后不需要等号。

      您的最终类定义应如下所示:

      export class Permission {
          watcher = { read: true };
      }
      

      如果您需要可选变量或对其他对象的依赖关系,您将需要用于更复杂对象的接口。 对于一个小对象,打字稿将通过类型来理解结构。

      【讨论】:

        猜你喜欢
        • 2018-12-07
        • 2018-10-14
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        相关资源
        最近更新 更多