在Java脚本中,obj['field']也可以通过obj.field访问对象值.但会在Typescript 中产生错误.

function F() {
  const obj = { field: "firstname", title: "First Name", value: 10 };
  let field = "field"
  console.log(obj[field]); // <-- Typescript error: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ field: string; title: string; value: number; }'
}

我怎样才能投掷obj来解决打字错误?

推荐答案

您可以显式注释field,如下所示:

function F() {
  const obj = { field: 'firstname', title: 'First Name', value: 10 };
  const field: keyof typeof obj = 'field'; // field is narrowed to be a known key of obj instead of 'string'

  console.log(obj[field]); // no type error here
}

Typescript相关问答推荐

TS 2339:属性切片不存在于类型DeliverableSignal产品[]上>'

TypScript如何在 struct 上定义基元类型?

APP_INITIALIZER—TypeError:appInits不是函数

用泛型类型覆盖父类函数导致类型y中的Property x不能赋给基类型Parent中的相同属性."'''''' "

需要使用相同组件重新加载路由变更数据—React TSX

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

在TypeScrip中分配回调时,参数的分配方向与回调本身相反.为什么会这样呢?

如何使用类型谓词将类型限制为不可赋值的类型?

在排版修饰器中推断方法响应类型

布局组件中的Angular 17命名路由出口

刷新时保持当前名称的Angular

对象类型的TypeScrip隐式索引签名

如何使用泛型函数参数定义类型脚本函数

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

为什么我的函数arg得到类型为Never?

从以下内容之一提取属性类型

带有';的类型脚本嵌套对象可选属性错误满足';

如何使用angular15取消选中位于其他组件中的复选框

组件使用forwardRef类型脚本时传递props

如何在Typescript 中定义具有相同类型的两个泛型类型的两个字段?