重复的标识符只读。 (属性)Constants.readonly:打字稿中的字符串

时间:2019-02-08 16:03:16

标签: angular typescript session-storage

我在我的角度项目中在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检索某些数据时,例如l et mobileNo = this.db.get(Constants.SESSSION_STORAGE,Constants.MOBILE_NO); 我正面临以下问题错误。

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

有人可以帮我解决这个错误。

2 个答案:

答案 0 :(得分:1)

好像您正在尝试创建字符串枚举。 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” | “ Prop2”。

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

答案 1 :(得分:1)

好像readonly属性是在2.0版打字稿中引入的。 检查您安装的打字稿版本至少为2.0。

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