Hur kan jag få längden på en sträng med hjälp av TypeScript-typer?


Jag försöker få längden på en sträng som ett nummer:

type Length = LengthOfString<"hello">
//   ^? should be 5

Jag är inte säker på var jag ska börja med detta. Hur kan jag åstadkomma detta?

(Jag försöker lära mig mer om TypeScripts typsystem -- jag tillämpar detta inte på JS-kod)

Svar #1

Ett sätt är att använda en template literal-sträng för att dela upp varje tecken i strängen. Vi lägger till ett element till tuplen L för varje tecken vi kan hämta.

type LengthOfString<T extends string, L extends any[] = []> = 
  T extends `${string}${infer R}` 
    ? LengthOfString<R, [...L, string]>
    : L["length"]

När det inte finns fler tecken kvar, returnerar vi length av L

Resultat :

type Length = LengthOfString<"hello">
//   ^? 5

Lekplats