dev-hamster

[type-challenges] medium 10-13 본문

타입스크립트/type-challenges

[type-challenges] medium 10-13

dev-hamster 2024. 10. 22. 23:46

Promise.all

Type the function PromiseAll that accepts an array of PromiseLike objects, the returning value should be Promise where T is the resolved result array.

09번은 너무 어려워서 패스하고 다음에 도전해본다!

Type Lookup

때때로 유니온 타입의 특정 속성을 기준으로 조회할 수도 있습니다.

이 챌린지에서는 유니온 타입 Cat | Dog에서 공통으로 사용하는 type 필드를 기준으로 해당하는 타입을 얻고자 합니다. 다시 말해서, 다음 예시에서는 LookUp<Cat | Dog, 'dog'>으로 Dog 타입을, LookUp<Cat | Dog, 'cat'>으로 Cat 타입을 얻을 수 있습니다.

type LookUp<U, T> = U extends { type: T } ? U : never;

Trim Left

정확한 문자열 타입이고 시작 부분의 공백이 제거된 새 문자열을 반환하는 TrimLeft를 구현하십시오.

빈 공백을 제거하고 재귀적으로 trim을 하려고 했는데 U는 string이 아니라 배열 타입이 되므로 오답이다.

type TrimLeft<S extends string> = S[number] extends [' ', ...infer U] ?  TrimLeft<U> : S;

리터럴을 이용해 처리할 수 있다.

type Space = ' ' | '\t' | '\n';
type TrimLeft<S extends string> = S extends `${Space}${infer U}` ?  TrimLeft<U> : S;

Trim

정확한 문자열 타입이고 양쪽 끝의 공백이 제거된 새 문자열을 반환하는 Trim를 구현하십시오.

TrimLeft 코드에서 분기 처리를 추가하면 된다.

type Space = ' ' | '\t' | '\n';

type Trim<S extends string> = S extends `${Space}${infer U}`
  ? Trim<U>
  : S extends `${infer T}${Space}`
  ? Trim<T>
  : S;

유니언으로 처리하면 더 깔끔하게 처리할 수 있다.

type Space = ' ' | '\t' | '\n';

type Trim<S extends string> = S extends `${Space}${infer T}` | `${infer T}${Space}` ? Trim<T> : S;

Capitalize

문자열의 첫 글자만 대문자로 바꾸고 나머지는 그대로 놔두는 Capitalize를 구현하세요.

Capitalize 인터페이스를 사용하면 된다.

type MyCapitalize<S extends string> = S extends `${infer X}${infer T}` ? `${Capitalize<X>}${T}` : S;

'타입스크립트 > type-challenges' 카테고리의 다른 글

[type-challenges] medium 14-16  (0) 2024.10.25
[type-chllenges] medium 05-08  (2) 2024.10.22
[type-challenges] medium 01-04  (0) 2024.10.17
[type-challengs] easy 10-14  (0) 2024.10.12
[type-challenges] easy 06-09  (1) 2024.10.11