如果我有一个数字数组,但想改变类型,使它成为一个字符串数组(具有相同的值),我应该怎么做?
const a = [ 1, 2, 3 ] as const type k = Array<typeof a[number]> // want this to become `("1" | "2" | "3")[]`
我该怎么把它变成一个字符串数组?
3qpi33ja1#
创建一个MapArray键的实用程序类型,并将其值类型转换为const string数组类型:
const a = [ 1, 2, 3 ] as const; type ConverToConstStringArray<T extends readonly number[]> = { [K in keyof T]: `${T[K]}`; }; type strArr = ConverToConstStringArray<typeof a>;
或者使用推断并递归地将数字转换为字符串:
type ConverToConstStringArray<T extends readonly number[]> = T extends readonly [infer A, ...infer B]? [`${A}`, ...ConverToConstStringArray<B>]: [];
Playground链接
68bkxrlz2#
如果你有一个“可序列化”类型T,也就是说,string | number | bigint | boolean | null | undefined的子类型,那么你可以通过template literal type${T}将它转换为它的字符串字面量表示。在你的例子中,你有typeof a[number]作为1 | 2 | 3,所以你可以写${typeof a[number]}将它转换为"1" | "2" | "3":
T
string | number | bigint | boolean | null | undefined
${T}
typeof a[number]
1 | 2 | 3
${typeof a[number]}
"1" | "2" | "3"
const a = [ 1, 2, 3 ] as const type K = Array<`${typeof a[number]}`>; // type K = ("1" | "2" | "3")[]
Playground链接到代码
2条答案
按热度按时间3qpi33ja1#
创建一个MapArray键的实用程序类型,并将其值类型转换为const string数组类型:
或者使用推断并递归地将数字转换为字符串:
Playground链接
68bkxrlz2#
如果你有一个“可序列化”类型
T
,也就是说,string | number | bigint | boolean | null | undefined
的子类型,那么你可以通过template literal type${T}
将它转换为它的字符串字面量表示。在你的例子中,你有typeof a[number]
作为1 | 2 | 3
,所以你可以写${typeof a[number]}
将它转换为"1" | "2" | "3"
:Playground链接到代码