TS:如何获取常量数组元素类型

时间:2019-05-13 13:29:24

标签: typescript

我将TS 3.4.5与const断言一起使用。如何检索声明的常量数组变量的元素类型?

export type GetArrayElementType<T extends Array<any>> = T extends (infer U)[] ? U : never;

export const MyConstArray = [
  'item1',
  'item2',
  'item3',
] as const;

export type MyConstArrayItem = GetArrayElementType<typeof MyConstArray>;

我希望将其作为输出:

export type MyConstArrayItem = "item1" | "item2" | "item3"

我不确定如何提取项目的类型信息,因为由于const断言,我的数组不再是数组类型,而是一个常量元组,因此无法应用GetArrayElementType在上面。

1 个答案:

答案 0 :(得分:2)

如果要使用条件类型,则必须记住as const会生成只读数组。因此,这应该可以按您期望的那样工作:

export type GetArrayElementType<T extends readonly any[]> = T extends readonly (infer U)[] ? U : never;

export const MyConstArray = [
  'item1',
  'item2',
  'item3',
  'item4',
] as const;

export type MyConstArrayItem = GetArrayElementType<typeof MyConstArray>;

但是更简单的解决方案是不使用条件类型。类型索引查询在这里更好地工作:

export const MyConstArray = [
  'item1',
  'item2',
  'item3',
  'item4',
] as const;

export type MyConstArrayItem = typeof MyConstArray[number];