TypeScript

[Type-Challenges] 1367 - Remove Index Signature

🫧 문제 객체 유형에서 인덱스 시그니처를 제외하는 RemoveIndexSignature를 구현하세요 type Foo = { [key: string]: any foo(): void } type A = RemoveIndexSignature // expected { foo(): void } 🛠️ 테스트 케이스 type Foo = { [key: string]: any foo(): void } type Bar = { [key: number]: any bar(): void 0: string } const foobar = Symbol('foobar') type FooBar = { [key: symbol]: any [foobar](): void } type Baz = { bar(): void baz: string } ..

TypeScript

[Type-Challenges] 296. Permutation

🫧 문제 주어진 유니언 타입을 순열 배열로 바꾸는 Permutation 타입을 구현하세요. type perm = Permutation; // ['A', 'B', 'C'] | ['A', 'C', 'B'] | ['B', 'A', 'C'] | ['B', 'C', 'A'] | ['C', 'A', 'B'] | ['C', 'B', 'A'] 🛠️ 테스트 케이스 type cases = [ Expect, Expect, Expect, Expect, Expect, ] 🎱 정답 type Permutation = [T] extends [never] ? [] : K extends K ? [K, ...Permutation] : never 💭 해설 [T] extends [never]의 부분은 T가 never 타입인지 확인합니다. n..

TypeScript

[Type-Challenges] 119. ReplaceAll

🫧 문제 주어진 문자열 S에서 부분 문자열 From을 찾아 모두 To로 교체하는 제네릭 ReplaceAll을 구현하세요. type replaced = ReplaceAll // expected to be 'types' 🛠️ 테스트 케이스 type cases = [ Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, ] 🎱 정답 type ReplaceAll = From extends '' ? S : S extends `${infer A}${From}${infer B}` ? `${A}${To}${ReplaceAll}` : S 💭 해설 1. 마지막 테스트 케이스로 인해 From이 ' ' 형태인지 확인 한다. 맞다면 S를 그대로 반환한다..

TypeScript

[Type-Challenges] 116. Replace

🫧 문제 문자열 S에서 From를 찾아 한 번만 To로 교체하는 Replace를 구현하세요. type replaced = Replace // expected to be 'types are awesome!' 🛠️ 테스트 케이스 type cases = [ Expect, Expect, Expect, Expect, Expect, Expect, ] 🎱 정답 type Replace = From extends '' ? S : S extends `${infer A}${From}${infer B}` ? `${A}${To}${B}` : S; 💭 해설 1. 테스트 케이스에 From 이 ' '인 경우가 있어 먼저 From 이 ' '인지 확인을 하고 맞다면 S를 반환합니다. 2. 아닌 경우에는 S가 ${infer A}${Fro..

TypeScript

[Type-Challenges] 110.Capitalize

🫧 문제 문자열의 첫 글자만 대문자로 바꾸고 나머지는 그대로 놔두는 Capitalize를 구현하세요. type capitalized = Capitalize // expected to be 'Hello world' 🛠️ 테스트 케이스 type cases = [ Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, ] 🎱 정답 type M..

TypeScript

[Type-Challenges] 18. Trim

🫧 문제 정확한 문자열 타입이고 양쪽 끝의 공백이 제거된 새 문자열을 반환하는 Trim를 구현하십시오. type trimmed = Trim // 기대되는 결과는 'Hello World'입니다. ☀️ 테스트 케이스 type cases = [ Expect, Expect, Expect, Expect, Expect, Expect, Expect, Expect, ] 🎱 정답 type Space = "\n" | '\t' | ' ' type Trim = S extends `${Space}${infer T}` | `${infer T}${Space}`? Trim : S 💭 해설 type Space = "\n" | '\t' | ' ' Space라는 유니온 타입을 먼저 정의해준다. 해당 타입은 공백 문자들인 \n (개행), ..

TypeScript

[TypeScript] Error(feat. catch) 타입 설정하기

타입스크립트로 에러 처리하기 } catch (err) { console.error(err.message); // Object is of type 'unknown' } 타입스크립트에서 error의 object가 unknown 타입으로 정의되어 에러가 발생하게 된다. Any 타입으로 강제 변경 catch (e: any) { return e.message; } as로 타입 단언 } catch (e) { return (e as Error).message; } instanceof로 타입 가드 type을 정하지 않고 any로도 캐스팅 하지 않는 가장 안전한 방법이다. } catch (e) { if (e instanceof Error) { return e.message; } }

놀이터주인장
'TypeScript' 카테고리의 글 목록