我可以在 TypeScript 中切片文字类型吗

Xia*_*yun 4 types typescript

在 TypeScript 中,当我想编辑文字类型时,它可以工作。

type Old = "helloWorld"
//   ^? "helloWorld"
type New = `${Old}New`
//   ^? "helloWorldNew"
Run Code Online (Sandbox Code Playgroud)

但我怎样才能做到这一点。

type Old = "helloWorld"
//   ^? "helloWorld"
type New = Slice<"helloWorld",5> // < Is it possible
//   ^? "World"
Run Code Online (Sandbox Code Playgroud)

Mat*_*ler 13

ts 中没有 Slice,但 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];
Run Code Online (Sandbox Code Playgroud)

第 1 行声明了两个参数,为了简洁起见,我们将使用单个字符。S 表示要分割的字符串,D 是分隔符。这一行确保它们都是字符串。

第 2 行通过检查是否可以从输入字符串扩展通用字符串来检查字符串是否为文字。如果是,则返回一个字符串数组。我们不能使用非文字字符串。

第 3 行检查字符串是否为空,如果是则返回一个空元组

type S2 = Split<"", "."> // string[]

type S3 = Split<"1.2", "."> // ['1', '2']

type S4 = Split<"1.2.3", "."> // ['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)

操场