00298-medium-length-of-string

Back

// your answers

type LengthOfString<S extends string, Result extends string[] = []> = S extends `${infer F}${infer R}`
  ? LengthOfString<R, [...Result, F]>
  : Result['length']

Solution by KeithChou #33219

type LengthOfString<S extends string, L extends string[] = []> = S extends `${infer F}${infer Last}` ? LengthOfString<Last, [...L, F]> : L['length']

Solution by ZhipengYang0605 #32822

type StringLength<T extends string, Acc extends 0[] = []> = T extends `${string}${infer Rest}`
    ? StringLength<Rest, [...Acc, 0]>
    : Acc['length']

Solution by ZhulinskiiDanil #32684

type StringToTuple<S extends string> = S extends `${infer F}${infer Rest}`
  ? [F,...StringToTuple<Rest>] : []
type LengthOfString<S extends string> = StringToTuple<S>["length"]

Solution by avidang #32530

type LengthOfString<S extends string, A extends string[] = []> = 
  S extends `${infer F}${infer R}` 
    ? LengthOfString<R, [...A, F]>
    : A['length']
  1. 스트링은 S['length'] 로 number까지밖에 타입 추론이 안된다.
  2. length를 정확한 숫자로 타입추론하기 위해서 배열에 스트링을 쪼개서 넣을 생각을 해야한다.

Solution by dev-hobin #32402

// 解答をここに記入
type LengthOfString<S extends string, T extends string[]=[]> = S extends `${infer F}${infer R}`
  ? LengthOfString<R, [...T, F]>
  : T['length'];

Solution by pea-sys #32121

// 你的答案
type LengthOfString<S extends string, Strs extends any[] = []> = S extends `${infer F}${infer Rest}`
                                                  ? F extends ''
                                                    ? 0
                                                    : LengthOfString<Rest, [F, ...Strs]>
                                                  : Strs["length"]

Solution by Codec-k #32081

type LengthOfString<S extends string, U extends string[] = []> = S extends `${infer F}${infer L}`
	? L extends ""
		? [L, ...U]["length"]
		: LengthOfString<L, [...U, F]>
	: 0;

Solution by gasmg #32014

type LengthOfString<S extends string, T extends string[] = []> = S extends `${infer F}${infer R}`
  ? LengthOfString<R, [...T, F]>
  : T['length'];

Solution by jinyoung234 #31736

type LengthOfString<S extends string, A extends any[] = []> = S extends `${infer F}${infer Rest}` ? LengthOfString<Rest, [...A, F]> : A['length'];

Solution by kai-phan #31641

type LengthOfString<
  S extends string,
  Letters extends string[] = [],
> = S extends ''
  ? Letters['length']
  : S extends `${infer _L}${infer R}`
  ? LengthOfString<R, [...Letters, R]>
  : unkown;

Solution by jakubjereczek #31536

type LengthOfString<
  S extends string,
  C extends any[] = []
> = S extends `${infer H}${infer T}`
  ? LengthOfString<T, [...C, H]>
  : C["length"];

Solution by vipulpathak113 #31475

I have looked through the different solutions and realized my solution is quite quirky so I wanted to share it.
type LengthOfString<S extends string, T = S> = S extends T ? 
    LengthOfString<S, never>['length'] :
    S extends `${infer ST}${infer Rest}` ?
        readonly [ST, ...LengthOfString<Rest, never>] :
        readonly []

Solution by roykoren10 #31458

type LengthOfString<
  S extends string,
  T extends string[] = []
> = S extends `${infer F}${infer R}`
  ? LengthOfString<R, [...T, F]>
  : T['length'];

Solution by MyeonghoonNam #31418

type LengthOfString<S extends string, R extends readonly string[] = []> = S extends `${infer A}${infer B}` ? LengthOfString<B, readonly [...R, A]> : R['length'];

Solution by eward957 #31244

type LengthList<S extends string> = S extends `${infer F}${infer Rest}` ? [F, ...LengthList<Rest>] : []

type LengthOfString<S extends string> = LengthList<S>['length']

Solution by moonshadow-miao #30727

type StringToArray<S extends string> = S extends `${infer A}${infer B}` ? [A, ...StringToArray<B>] : []
type LengthOfString<S extends string> = StringToArray<S>['length']

string or array has 'length',so,we can convert it to array.

Solution by MrRabbit1993 #30442

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

type LengthOfString<S extends string> = Split<S>['length'];```

Solution by kai-phan #30349

type LengthOfString<S extends string, L extends string[] = []> = S extends `${infer A}${infer B}` ? LengthOfString<B, [...L, A]> : L['length']

Solution by zhangqiangzgz #30177

type LengthOfString<S extends string, A extends string[] = []> = S extends `${string}${infer R}` ? LengthOfString<R, [...A,string]>: A['length'];

type Len = LengthOfString<'kumamam'>;

const a: Len = 7;

Solution by rxMATTEO #30094

type LengthOfString<S extends string, K extends Array<unknown> = []> = S extends `${infer First}${infer Rest}`
  ? LengthOfString<Rest, [First, ...K]>
  : K['length']

Solution by agus-wesly #29960

// 여기 풀이를 입력하세요
type StringToArray<S extends string> = S extends `${infer First}${infer Rest}` ? [First, ...StringToArray<Rest>] : []
type LengthOfString<S extends string> = StringToArray<S>['length']

Solution by eodnjs467 #29778

// your answers

type StringArray<T extends string> = T extends `${infer First}${infer Rest}` ? [First , ...StringArray<Rest>] : []

type LengthOfString<S extends string> = StringArray<S>['length']

Solution by kerolossamir165 #29543

// your answers

type LengthOfString<S extends string , Acc extends string[] = []> =
 S extends `${string}${infer Rest}` ? LengthOfString<Rest ,[...Acc,string]> : Acc["length"]

Solution by kerolossamir165 #29542

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

Solution by MohammadArasteh #29410

type StringToArray<S extends string> = S extends `${infer First}${infer Rest}` ? [First, ...StringToArray<Rest>] : [];
type LengthOfString<S extends string> = StringToArray<S>['length'];

Solution by maximallain #29294

type String2Tuple<S extends string> = S extends `${infer F}${infer R}` ? [F, ...String2Tuple<R>] : []

type LengthOfString<S extends string> = String2Tuple<S>['length']

Solution by Yirujet #29235

type LengthOfString<S extends string, T extends string[] = []> = S extends `${infer H}${infer R}` ? LengthOfString<R, [...T, H]> : T['length']

Notes: When S is '', the extends statement returns false.

Solution by qianzhong516 #28942

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

Solution by kai-phan #28904


type StringToCharArr<S extends string> = S extends `${infer F}${infer R}` ? [F, ...StringToCharArr<R>] : [];

type LengthOfString<S extends string> = StringToCharArr<S>['length'];

Solution by kai-phan #28890