我有一个对象文字,如下所示(所有属性在编译时都是已知的):
const foo = {
"hello": "hola"
};
如果foo
是接口而不是变量,我可以轻松地执行类似
/** THEORETICAL ONLY - Does not compile! */
function translate(input: keyof foo): string {
return foo[input];
}
但是,使用变量这样做不起作用,因为编译器找不到名为foo
的接口。
Typescript是否支持keyof
对在编译时已知其值的对象文字的操作?
答案 0 :(得分:79)
keyof
对类型进行操作,但foo
是一个值。但是typeof
运算符会获取一个值并生成其类型,因此您可以使用keyof typeof foo
来执行此操作。
答案 1 :(得分:0)
有点偏离,虽然我正在寻找文字的索引器键,但是将其放在此处以供将来参考。
const foo = {
"hello": "hola"
};
let data: { [key in keyof typeof foo]:number} & { name: string, index: number }[] = [] as any;
data.foo = 1;
data[0] = {name:'foo', 1};