代码之家  ›  专栏  ›  技术社区  ›  andershagbard Anoop

在TypeScript中将对象类型转换为数组

  •  1
  • andershagbard Anoop  · 技术社区  · 2 年前

    如何将以下类型转换为具有键/值对的数组?

    type MyObject = {
      foo: 'bar'
      baz: 'qux'
    }
    

    我想要的类型:

    type MyKeyValuePair = ['foo', 'bar'] | ['baz', 'qux']
    

    我尝试过keyof等的各种组合,但它永远不会成为联合类型,在数组中,它们的第一个参数与特定值匹配。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Danyil    2 年前

    您需要使用Typesrpt的强大功能——使用映射类型和条件类型。以下是步骤:

    1. 使用辅助类型将单个键转换为元组:

      type ToTuple<T, K extends keyof T> = [K, T[K]];

    2. 使用映射类型将此辅助对象类型应用于对象类型中的每个键:

    type TupleMap<T> = {
      [K in keyof T]: ToTuple<T, K>;
    }[keyof T];
    
    1. 现在你可以申请了 TupleMap 到您的 MyObject 键入以获得所需结果:
    type MyObject = {
      foo: 'bar';
      baz: 'qux';
    }
    
    type MyKeyValuePair = TupleMap<MyObject>;  // ['foo', 'bar'] | ['baz', 'qux']
    

    祝你好运

    推荐文章