有没有办法同时使用强类型索引访问器和访问属性,而不重复类型注释中的属性?
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,
}
但这只是重复我自己。可以推断属性,就像我没有指定任何注释一样。这可能吗?
答案 0 :(得分:0)
可以推断出属性。这可能吗
TypeScript不会推断字符串profileKey
的可能值:
Object.keys(profiles).map(profileKey =>
技术细节:这是因为Object.keys
函数的定义。
所以profileKey
只是一些字符串(不限于三个值),因此TypeScript无法应用此键的约束 - 该值。如果要为所有字符串提供约束,则必须提供索引器定义