Typescript - 属性和索引访问器同时

时间:2016-06-07 11:40:43

标签: typescript

有没有办法同时使用强类型索引访问器和访问属性,而不重复类型注释中的属性?

let profile = profiles[profileKey];
let profile = profiles.ADMIN;

我有像这样定义的键值对字典:

const profiles = {
    "ADMIN": "Admin",
    "TCA": "Test Center Admin",
    "TT": "Test Taker",
};

现在,配置文件const的属性被推测,我可以写let admin = profiles.ADMIN

但是为了使用索引访问器,我必须明确指定它:

const profiles: {[profileKey: string]: string} = {
    "ADMIN": "Admin",
    "TCA": "Test Center Admin",
    "TT": "Test Taker",
};

但是,现在我无法访问属性。

我知道我可以在profiles`类型注释中定义所有属性:

interface IProfiles {
   [profileKey: string]: string;
   ADMIN: string,
   TCA: string,
   TT: string,
}

但这只是重复我自己。可以推断属性,就像我没有指定任何注释一样。这可能吗?

1 个答案:

答案 0 :(得分:0)

  

可以推断出属性。这可能吗

TypeScript不会推断字符串profileKey的可能值:

Object.keys(profiles).map(profileKey =>

技术细节:这是因为Object.keys函数的定义。

所以profileKey只是一些字符串(不限于三个值),因此TypeScript无法应用此键的约束 - 该值。如果要为所有字符串提供约束,则必须提供索引器定义