从数组中提取嵌套属性

时间:2021-04-23 13:12:24

标签: typescript tuples typescript-generics

给定一组令牌:

const myArray = <const>[
  {
    tokens: ["one", "two"],
  },
  {
    tokens: ["three"],
  },
  {
    tokens: [],
  },
  {
    somethingElse: {},
  },
];

我想为 tokens 属性所具有的所有不同文字获取一个元组。在上面的例子中,结果应该是 "one" | "two" | "three",但是我所有的尝试都会产生 any,除非我删除了第三个数组项。

这是我试过的:

type ArrayItem = typeof myArray extends (infer T)[] ? T : never;
type ArrayItemWithTokens = Extract<ArrayItem, { tokens: [string] }>;
type TokenArrays = ArrayItemWithTokens extends { tokens: infer T } ? T : never;
type Token = TokenArrays extends (infer T)[] ? T : never;

1 个答案:

答案 0 :(得分:2)

const myArray = [
  {
    tokens: ["one", "two"],
  },
  {
    tokens: ["three"],
  },
  {
    tokens: [],
  },
  {
    somethingElse: {},
  },
] as const;

type Token = Extract<(typeof myArray)[number], {tokens: unknown}>['tokens'][number];
相关问题