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

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

如果foo是一个接口而不是一个变量,我可以很容易地做如下事情

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

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

Typescript是否支持对编译时已知值的对象文本执行keyof次操作?

推荐答案

keyof对类型进行操作,但foo是一个值.但是typeof运算符获取一个值并生成它的类型,所以可以使用keyof typeof foo来实现这一点.

请注意,只有在没有将接口与对象文字相关联的情况下,这才有效(感谢radicand).

Typescript相关问答推荐

如何使用axios在前端显示错误体

TS不推断类型在条件判断后具有属性'

当使用`type B = A`时,B的类型显示为A.为什么当`type B = A时显示为`any `|用A代替?

类型{...}的TypeScript参数不能赋给类型为never的参数''

为什么从数组中删除一个值会删除打字错误?

带占位符的模板文字类型何时扩展另一个?

Next.js错误:不变:页面未生成

是否使用非显式名称隔离在对象属性上声明的接口的内部类型?

如何在处理数组时缩小几个派生类实例之间的类型范围?

AngularJS服务不会解析传入的Json响应到管道中的模型

17个Angular 的延迟观察.如何在模板中转义@符号?

为什么在泛型方法中解析此promise 时会出现类型错误?

打印脚本中正则函数和函数表达式的不同类型缩小行为

TypeScrip:如何缩小具有联合类型属性的对象

是否可以在类型脚本中定义条件返回类型,而不在函数体中使用类型转换?

在类型脚本中创建显式不安全的私有类成员访问函数

更漂亮的格式数组<;T>;到T[]

我可以使用JsDocs来澄清Typescript实用程序类型吗?

通过辅助函数获取嵌套属性时保留类型

React中的效果挂钩在依赖项更新后不会重新执行