代码之家  ›  专栏  ›  技术社区  ›  Lev

如何在对象键上声明类型

  •  1
  • Lev  · 技术社区  · 6 年前
    type MyType = 'foo' | 'bar' | 'baz'
    
    const myObject = { foo: 'val1', bar: 'val2', baz: 'val3'} 
    

    我如何定义一个类型来表示一个键属于类型的对象 MyType

    1 回复  |  直到 6 年前
        1
  •  2
  •   Titian Cernicova-Dragomir    6 年前

    你可以使用 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<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' }