spinny:~/writing $ less advanced-typescript-patterns.md
12TypeScript는 대규모 웹 개발의 업계 표준이 되었습니다. 대부분의 개발자가 인터페이스와 타입의 기본을 알고 있지만, 진정한 힘은 고급 타입 시스템에 있습니다. 여기 시니어 엔지니어로서 당신을 차별화할 5가지 패턴이 있습니다.34## 1. Generic Constraints56Generics는 강력하지만, 때로는 전달될 수 있는 것을 제한해야 합니다. `extends`가 여기서 여러분의 친구입니다.78```typescript9interface HasId {10 id: string;11}1213function getById<T extends HasId>(list: T[], id: string): T | undefined {14 return list.find((item) => item.id === id);15}16```1718`T`가 `HasId`를 확장하도록 보장함으로써, 함수 내부에서 `.id`에 접근하는 것이 안전하다는 것을 보장합니다.1920## 2. Conditional Types2122조건부 타입은 비균일 타입 매핑을 생성할 수 있게 해줍니다. 구문은 JavaScript의 삼항 연산자와 유사합니다.2324```typescript25type IsString<T> = T extends string ? true : false;2627type A = IsString<string>; // true28type B = IsString<number>; // false29```3031실용적인 사용 사례는 유니온에서 타입을 필터링하는 것입니다:3233```typescript34type Diff<T, U> = T extends U ? never : T;35type NonNullable<T> = Diff<T, null | undefined>;36```3738## 3. Mapped Types3940Mapped types는 속성을 변환하여 기존 타입을 기반으로 새로운 타입을 생성할 수 있게 해줍니다.4142```typescript43type ReadOnly<T> = {44 readonly [P in keyof T]: T[P];45};4647interface User {48 name: string;49 age: number;50}5152type ReadOnlyUser = ReadOnly<User>;53```5455수정자를 추가하거나 제거할 수도 있습니다:5657```typescript58type Mutable<T> = {59 -readonly [P in keyof T]: T[P];60};61```6263## 4. Template Literal Types6465TypeScript 4.1에서 도입된 이 기능은 문자열 타입을 직접 조작할 수 있게 해줍니다.6667```typescript68type World = 'world';69type Greeting = `hello ${World}`; // "hello world"7071type Color = 'red' | 'blue';72type Quantity = 'light' | 'dark';7374type Palette = `${Quantity}-${Color}`;75// "light-red" | "light-blue" | "dark-red" | "dark-blue"76```7778CSS 클래스나 이벤트 이름과 같이 특정 패턴을 따르는 문자열을 타이핑하는 데 매우 유용합니다.7980## 5. `infer` 키워드8182조건부 타입 내의 `infer` 키워드는 다른 타입에서 타입을 추출할 수 있게 해줍니다.8384```typescript85type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;8687function check(): boolean {88 return true;89}9091type CheckReturn = ReturnType<typeof check>; // boolean92```9394여기서 우리는 TypeScript에게 함수의 반환 타입 `R`을 "추론"하고 반환하도록 요청합니다.9596## 결론9798이러한 패턴을 마스터하면 견고하고 우수한 개발자 경험(DX)을 제공하는 라이브러리와 유틸리티를 작성할 수 있습니다. 고급 TypeScript의 목표는 복잡성을 위한 복잡성이 아니라, 안전성과 표현력입니다.99
:시니어 엔지니어를 위한 5가지 고급 TypeScript 패턴lines 1-99 (END) — press q to close