如何声明对象键的类型

时间:2018-09-17 09:21:52

标签: typescript

type MyType = 'foo' | 'bar' | 'baz'

const myObject = { foo: 'val1', bar: 'val2', baz: 'val3'} 

如何定义代表键类型为MyType的对象的类型?

1 个答案:

答案 0 :(得分:2)

您可以使用mapped type从键的组合转到对象类型,其中所有键都是给定类型。实际上,有一个名为Record的预定义映射类型可以完成此任务:

type MyType = 'foo' | 'bar' | 'baz'

const myObject: Record<MyType, string> = { foo: 'val1', bar: 'val2', baz: 'val3' }
const myObject2: Record<MyType, string> = { foo: 'val1', bar: 'val2' } //error baz missing
const myObject3: Record<MyType, string> = { foo: 'val1', bar: 'val2', baz : 0 } //error baz of type number  

Record将合并一个键并创建一个类型,其中所有键均具有第二个type参数指定的类型,因此Record<MyType, string>等效于{ foo: string, bar: string, baz: string }

注意

如果您没有其他用途来进行键的联合,则最好使用简单的界面:

interface MyObjectType { foo: string, bar: string, baz: string }
const myObject: MyObjectType = { foo: 'val1', bar: 'val2', baz: 'val3' }