typescript 将类型编号转换为类型字符串

h43kikqp  于 2023-04-13  发布在  TypeScript
关注(0)|答案(2)|浏览(256)

如果我有一个数字数组,但想改变类型,使它成为一个字符串数组(具有相同的值),我应该怎么做?

const a = [
    1,
    2,
    3
] as const

type k = Array<typeof a[number]> // want this to become `("1" | "2" | "3")[]`

我该怎么把它变成一个字符串数组?

3qpi33ja

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链接

68bkxrlz

68bkxrlz2#

如果你有一个“可序列化”类型T,也就是说,string | number | bigint | boolean | null | undefined的子类型,那么你可以通过template literal type${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链接到代码

相关问题