我将 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>;
Run Code Online (Sandbox Code Playgroud)
我想有作为输出:
export type MyConstArrayItem = "item1" | "item2" | "item3"
Run Code Online (Sandbox Code Playgroud)
我不完全确定如何提取项目的类型信息,因为由于 const 断言,我的数组不再是数组类型而是一个常量元组,因此GetArrayElementType不能对其应用。
Tit*_*mir 13
如果要使用条件类型,则必须记住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>;
Run Code Online (Sandbox Code Playgroud)
但更简单的解决方案是不使用条件类型。类型索引查询在这里效果更好:
export const MyConstArray = [
'item1',
'item2',
'item3',
'item4',
] as const;
export type MyConstArrayItem = typeof MyConstArray[number];
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式轻松完成:
type MyConstArrayItem = typeof MyConstArray[number]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2183 次 |
| 最近记录: |