TypeScript模板文本数组连接

0yg35tkg  于 2023-05-23  发布在  TypeScript
关注(0)|答案(1)|浏览(107)

我发现了一个类型级别Split函数的定义:

type Split<S extends string, D extends string> =
    string extends S ? string[] :
    S extends '' ? [] :
    S extends `${infer T}${D}${infer U}` ? [T, ...Split<U, D>] : [S];

是否也有一种方法来创建一个类型级别的Join<string[], string>函数,以便我可以使用它们来将下划线更改为连字符?
例如:

type ChangeHyphensToUnderscore<T> = { [P in keyof T & string as `${Join(Split<P, '-'>, '_')}`]: T[P] };
s8vozzvw

s8vozzvw1#

当然有:

type Stringable = string | number | bigint | boolean | null | undefined;

type Join<A, Sep extends string = ""> = A extends [infer First, ...infer Rest] ? Rest extends [] ? `${First & Stringable}` : `${First & Stringable}${Sep}${Join<Rest, Sep>}` : "";

您还可以通过使用tail call optimization略微提高性能:

type Join<A, Sep extends string = "", R extends string = ""> = A extends [infer First, ...infer Rest] ? Join<Rest, Sep, R extends "" ? `${First & Stringable}` : `${R}${Sep}${First & Stringable}`> : R;

这里有一个操场给你玩。

相关问题