【问题标题】:Duplicate identifier readonly. (property) Constants.readonly : string in typescript重复标识符只读。 (属性) Constants.readonly :打字稿中的字符串
【发布时间】:2019-02-09 02:59:04
【问题描述】:

我在我的 Angular 项目中使用 utils -> Constants.ts 中的以下代码。

Constants.ts

 export class Constants {
     static readonly LOCAL_STORAGE  = 'LOCAL_STORAGE';
     static readonly SESSSION_STORAGE  = 'SESSSION_STORAGE';
  }

我收到错误:重复的标识符只读。 (属性) Constants.readonly :字符串。 当我将光标放在只读上时。

并且 [ts] '=' 预期。 [ts] 找不到任何名称 LOCAL_STORAGE。 当我将光标放在 LOCAL_STORAGE 上时。

所以当我尝试从另一个 ts 文件中的 session_storage 检索一些数据时,例如 let mobileNo = this.db.get(Constants.SESSSION_STORAGE, Constants.MOBILE_NO); 我面临以下问题错误。

“typeOf 常量”类型上不存在属性“SESSION_STORAGE”。

谁能帮我解决这个错误。

【问题讨论】:

  • 为什么不使用枚举?这个简单的功能你不需要一个类
  • 啊,抱歉,这是 angular 还是 angularjs 代码 sn-p?
  • @bodorgergely。这是 Angular 6 打字稿

标签: angular typescript session-storage


【解决方案1】:

似乎readonly 属性是在 typescript 2.0 版中引入的。 检查您安装的 typescript 版本是否至少为 2.0。

在新的 stackblitz 项目中使用您的课程没有问题。 https://stackblitz.com/edit/stackoverflow-54596178

【讨论】:

    【解决方案2】:

    看起来您正在尝试创建一个字符串枚举。 TypeScript 2.4 现在有字符串枚举,所以你的代码可以正常工作:

    enum E {
        hello = "hello",
        world = "world"
    };
    

    或者对于早期版本的 TypeScript:

    export const Enum = createStringEnum(["Prop1", "Prop2"]);
    export type Enum = keyof typeof Enum;
    
    function createStringEnum<T extends string>(keys: T[]): {[K in T]: K} {
        return keys.reduce((res, key) => {
            res[key] = key;
            return res;
        }, Object.create(null));
    }
    

    createStringEnum 返回一个对象,其键和值作为数组中传递的字符串。

    keyof typeof Enum; 等价于“Prop1” | “道具2”。

    这样,您可以使用 Enum 来验证类型和访问对象内部的字符串值。

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 2021-09-06
      • 2017-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      相关资源
      最近更新 更多