是否可以在文字而不是接口上使用`keyof`运算符?

时间:2017-01-30 23:20:26

标签: typescript

我有一个对象文字,如下所示(所有属性在编译时都是已知的):

const foo = {
  "hello": "hola"
};

如果foo是接口而不是变量,我可以轻松地执行类似

的操作
/** THEORETICAL ONLY - Does not compile! */
function translate(input: keyof foo): string {
  return foo[input];
}

但是,使用变量这样做不起作用,因为编译器找不到名为foo的接口。

Typescript是否支持keyof对在编译时已知其值的对象文字的操作?

2 个答案:

答案 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};