首页 > 解决方案 > Typescript 使用括号表示法访问对象的可选属性

问题描述

我有一个对象,它的类型是在那里定义的:

interface IObject extends IIndexable {
  foo?: string;
  foo2?: string;
  foo3?: string;
}

我的IIndexable样子是这样的:

interface IIndexable {
  [key: string]: string;
}

我想使用括号符号访问它的属性,如下所示:

let object: IObject = {};
object["foo"] = "bar"; 

问题是在中定义的键IIndexable只能是stringor类型,number因为我的对象的键都是可选的,所以它们的类型是string | undefined。我得到的错误信息是:

'string | 类型的属性'fullName' undefined' 不能分配给字符串索引类型'string'。

我不能让我的对象的键不是可选的,因为我的对象有时可能是空的。我也尝试制作对象的 type IObject | {},但那样我仍然无法访问它的属性。

有没有办法解决这个问题?

标签: typescript

解决方案


您可以定义类型别名(而不是接口)并使用与 的交集IIndexable

type IObject = IIndexable & {
  foo?: string;
  foo2?: string;
  foo3?: string;
}

操场


推荐阅读