spinny:~/writing $ vim advanced-typescript-patterns.md
1~2TypeScript는 대규모 웹 개발의 업계 표준이 되었습니다. 대부분의 개발자가 인터페이스와 타입의 기본을 알고 있지만, 진정한 힘은 고급 타입 시스템에 있습니다. 여기 시니어 엔지니어로서 당신을 차별화할 5가지 패턴이 있습니다.3~4## 1. Generic Constraints5~6Generics는 강력하지만, 때로는 전달될 수 있는 것을 제한해야 합니다. `extends`가 여기서 여러분의 친구입니다.7~8```typescript9interface HasId {10 id: string;11}12~13function getById<T extends HasId>(list: T[], id: string): T | undefined {14 return list.find((item) => item.id === id);15}16```17~18`T`가 `HasId`를 확장하도록 보장함으로써, 함수 내부에서 `.id`에 접근하는 것이 안전하다는 것을 보장합니다.19~20## 2. Conditional Types21~22조건부 타입은 비균일 타입 매핑을 생성할 수 있게 해줍니다. 구문은 JavaScript의 삼항 연산자와 유사합니다.23~24```typescript25type IsString<T> = T extends string ? true : false;26~27type A = IsString<string>; // true28type B = IsString<number>; // false29```30~31실용적인 사용 사례는 유니온에서 타입을 필터링하는 것입니다:32~33```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```37~38## 3. Mapped Types39~40Mapped types는 속성을 변환하여 기존 타입을 기반으로 새로운 타입을 생성할 수 있게 해줍니다.41~42```typescript43type ReadOnly<T> = {44 readonly [P in keyof T]: T[P];45};46~47interface User {48 name: string;49 age: number;50}51~52type ReadOnlyUser = ReadOnly<User>;53```54~55수정자를 추가하거나 제거할 수도 있습니다:56~57```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```62~63## 4. Template Literal Types64~65TypeScript 4.1에서 도입된 이 기능은 문자열 타입을 직접 조작할 수 있게 해줍니다.66~67```typescript68type World = 'world';69type Greeting = `hello ${World}`; // "hello world"70~71type Color = 'red' | 'blue';72type Quantity = 'light' | 'dark';73~74type Palette = `${Quantity}-${Color}`;75// "light-red" | "light-blue" | "dark-red" | "dark-blue"76```77~78CSS 클래스나 이벤트 이름과 같이 특정 패턴을 따르는 문자열을 타이핑하는 데 매우 유용합니다.79~80## 5. `infer` 키워드81~82조건부 타입 내의 `infer` 키워드는 다른 타입에서 타입을 추출할 수 있게 해줍니다.83~84```typescript85type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;86~87function check(): boolean {88 return true;89}90~91type CheckReturn = ReturnType<typeof check>; // boolean92```93~94여기서 우리는 TypeScript에게 함수의 반환 타입 `R`을 "추론"하고 반환하도록 요청합니다.95~96## 결론97~98이러한 패턴을 마스터하면 견고하고 우수한 개발자 경험(DX)을 제공하는 라이브러리와 유틸리티를 작성할 수 있습니다. 고급 TypeScript의 목표는 복잡성을 위한 복잡성이 아니라, 안전성과 표현력입니다.99~
NORMAL · advanced-typescript-patterns.md [readonly]99 lines · :q to close