type MyType = 'foo' | 'bar' | 'baz'
const myObject = { foo: 'val1', bar: 'val2', baz: 'val3'}
如何定义代表键类型为MyType
的对象的类型?
答案 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' }