如何表示其值都具有特定类型的对象类型

时间:2016-11-03 22:17:42

标签: typescript

简单示例:

type Bar = { x: number; y: boolean }
type Foo = { [key: string]: Bar }

const foo: Foo = {
  baz: { x: 3, y: true }
}

// This works fine
console.log(foo['baz'])

// Error: Property 'baz' does not exist on type '{ [key: string]: { x: number; y: boolean; }; }'.
console.log(foo.baz)

我希望最后一行输入check,foo.baz的类型应为Bar。如果索引签名不是制作这种类型的正确方法,那么它是什么?有可能吗?

2 个答案:

答案 0 :(得分:2)

索引签名就像一本字典。对于访问,您需要使用索引。这是为了在使用时明确指出未找到的密钥是有效的可能性。

修复

如果您知道会员总是会在那里注释,例如

type Foo = { [key: string]: Bar, baz:Bar }

答案 1 :(得分:0)

如果您想拥有已知属性,则可以执行以下操作:

interface Foo2 {
    baz: Bar;
}

const foo2: Foo2 = {
    baz: { x: 3, y: true }
}

console.log(foo2.baz); // fine 

修改

如果属性是任意的,您将不得不使用问题中的类型,并且您无法将这些值作为属性访问,因为正如您所说,键是任意的,编译器具有无法知道您指定的属性名称是否存在,例如您可能有拼写错误并使用bar而不是baz,编译器无法向您发出警告。< / p>