Skip to content

rookedsysc/effective-typescript-study

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 

Repository files navigation

📅 전체 일정 개요

  • 📚 학습기간
    • 1주차: 기본 원칙과 타입 시스템의 기초 (1장, 2장)
    • 2주차: 타입 추론과 올바른 타입 설계 (3장, 4장)
    • 3주차: any 다루기와 라이브러리 사용법 (5장, 6장)
    • 4주차: 실행 환경과 마이그레이션 전략 (7장, 8장)
  • 😎 미션 수행 기간 : 5 ~ 8주 / 상세 진행 방법 및 미션 내용 추후 공개 예정

문서화 규칙

  • docs/week{주차}/item{범위(예시: 1-5)}.md 파일에 정리 내용을 올린다.

📚 학습 기간

1주차: 타입스크립트의 세계관 이해 (Ch 1 & Ch 2)

가장 중요한 주차입니다. 타입스크립트가 자바스크립트와 어떻게 다른지, 그리고 **'타입을 집합으로 본다'**는 관점을 확실히 잡아야 합니다.

발표자 담당 아이템 핵심 키워드
멤버 1 아이템 1 ~ 5 구조적 타이핑(Duck Typing), 런타임 vs 컴파일 타임
멤버 2 아이템 6 ~ 10 타입 시스템, 집합론, type vs interface
멤버 3 아이템 11 ~ 14 잉여 속성 체크, 함수 타입, 제네릭 반복 줄이기
멤버 4 아이템 15 ~ 18 인덱스 시그니처, readonly, 매핑된 타입(Mapped Types)

🔍 추가로 알아보면 좋은 것 (Deep Dive)

  • 구조적 타이핑 (Structural Typing): Java/C#의 명목적 타이핑(Nominal Typing)과 비교하여 장단점 토론하기.
  • 잉여 속성 체크 (Excess Property Check): 구조적 타이핑임에도 불구하고 리터럴 객체 할당 시 에러가 나는 이유 명확히 하기.
  • 집합론적 사고: never, unknown, any를 집합(공집합, 전체집합 등)으로 설명해보기.

2주차: 똑똑하게 추론하고 설계하기 (Ch 3 & Ch 4)

타입스크립트가 코드를 어떻게 해석하는지(추론) 이해하고, 이를 바탕으로 깔끔한 API를 설계하는 방법을 배웁니다.

발표자 담당 아이템 핵심 키워드
멤버 1 아이템 19 ~ 23 타입 넓히기/좁히기, 타입 가드, 객체 생성
멤버 2 아이템 24 ~ 27 비동기(Async), 문맥(Context), 함수형 기법
멤버 3 아이템 28 ~ 32 유효 상태(State), 태그된 유니온(Discriminated Union)
멤버 4 아이템 33 ~ 37 구체적 타입(Branding), API 명세 기반 설계

🔍 추가로 알아보면 좋은 것 (Deep Dive)

  • Discriminated Union (태그된 유니온): 리덕스(Redux) 액션이나 복잡한 상태 관리에서 이 패턴이 어떻게 쓰이는지 예제 찾아오기. (아이템 28, 32와 관련)
  • Branding (상표 붙이기): 실제 런타임에는 없지만 컴파일 타임에만 존재하는 '가짜 속성'을 이용해 타입을 구분하는 기법 실습해보기. (아이템 37)

3주차: 안전망 구축과 라이브러리 (Ch 5 & Ch 6)

불가피하게 any를 써야 할 때의 대처법과 외부 라이브러리(@types)를 다루는 고급 기법입니다.

발표자 담당 아이템 핵심 키워드
멤버 1 아이템 38 ~ 41 any의 범위 제한, 암묵적 any 방지
멤버 2 아이템 42 ~ 44 unknown 활용, 몽키 패치 안전하게 하기
멤버 3 아이템 45 ~ 49 d.ts, devDependencies, this 타이핑
멤버 4 아이템 50 ~ 52 조건부 타입(Conditional Types), 오버로딩, 미러 타입

🔍 추가로 알아보면 좋은 것 (Deep Dive)

  • Unknown vs Any:any보다 unknown이 안전한지 코드 예제로 증명하기.
  • 조건부 타입: T extends U ? X : Y 문법을 활용하여 유틸리티 타입(Pick, Omit 등)이 내부적으로 어떻게 구현되어 있는지 뜯어보기. (멤버 4의 발표가 난이도가 높습니다)

4주차: 실전 운영과 마이그레이션 (Ch 7 & Ch 8)

실제 브라우저 환경(DOM)과 기존 JS 프로젝트를 TS로 전환하는 전략을 다룹니다.

발표자 담당 아이템 핵심 키워드
멤버 1 아이템 53 ~ 55 Enum/Parameter Properties 지양, DOM 계층
멤버 2 아이템 56 ~ 58 private vs #, 소스맵 디버깅, 모던 JS
멤버 3 아이템 59 ~ 60 JSDoc(@ts-check), allowJs 활용 전략
멤버 4 아이템 61 ~ 62 의존성 그래프, noImplicitAny 적용 순서

🔍 추가로 알아보면 좋은 것 (Deep Dive)

  • Enum을 쓰지 말아야 하는 이유: Tree-shaking 관점과 Union Type으로 대체하는 방법 알아보기.
  • 마이그레이션 전략: 본인들의 프로젝트나 가상의 프로젝트를 가정하고, 어떤 순서로 파일을 전환할지 시나리오 짜보기.

😎 Mission

  • 📦 프로젝트명: Type-Safe Logistics (타입 안전한 물류 시스템)

  • 🛠️ 진행방식:

      1. 각 주차별 요구사항을 상세히 구현합니다.
      1. 서로의 코드를 리뷰합니다.
      1. 매주 모임 시간에 각자의 코드를 발표하고 리뷰를 기반으로 의논합니다.
  • ✅ 완료 기준

    • 각 주차별로 제공되는 검증 조건(REQ-XXX)을 모두 통과해야 합니다.
      • TypeScript 컴파일 에러가 예상대로 발생하는지 확인
      • 실행 시 올바른 결과가 출력되는지 검증
      • 금지된 패턴(any, as 등)을 사용하지 않았는지 체크

🗓️ WEEK 1: 타입 안전한 재고 관리 시스템

학습 목표

  • readonly를 활용한 불변성 보장
  • 구조적 타이핑 이해
  • any 타입 완전 배제

미션 요약
상품 재고를 관리하는 시스템을 구현하며, TypeScript의 불변성 개념을 체득합니다.
데이터가 실수로 변경되는 것을 컴파일 타임에 방지하는 방법을 배웁니다.

실무 연관성: Redux state, React props, API 응답 객체 등 불변 데이터 관리

🗓️ WEEK 2: 제네릭 기반 범용 저장소

학습 목표

  • 제네릭 타입 <T extends Entity> 활용
  • Partial<T>, keyof T 등 타입 연산자 사용
  • 타입 안전한 유틸리티 함수 작성

미션 요약
어떤 타입이든 저장하고 검색할 수 있는 범용 Repository를 제네릭으로 구현합니다.
코드 재사용과 타입 안전성을 동시에 확보하는 방법을 익힙니다.

실무 연관성: ORM, API 클라이언트, 공통 유틸리티 라이브러리

🗓️ WEEK 3: 주문 상태 머신 (State Machine)

학습 목표

  • Discriminated Union 타입 활용
  • 타입 시스템으로 불가능한 상태 방지
  • 타입 좁히기 (Type Narrowing) 마스터

미션 요약
주문의 생애주기(pending → paid → shipped → delivered)를 타입으로 표현합니다.
"결제하지 않고 배송"같은 논리적으로 불가능한 상태를 컴파일 타임에 차단합니다.

실무 연관성: 상태 관리, 워크플로우 시스템, 폼 단계 처리

🗓️ WEEK 4: 외부 결제 API 연동

학습 목표

  • unknown 타입 안전하게 다루기
  • 타입 가드 (Type Guard) 직접 구현
  • 타입 단언(as) 없이 안전하게 처리

미션 요약
외부 결제 API의 응답을 unknown으로 받아 타입 가드로 검증합니다.
런타임에 발생할 수 있는 모든 예외 케이스를 타입 시스템과 함께 처리하는 방법을 배웁니다.

실무 연관성: 외부 API 연동, JSON 파싱, 사용자 입력 검증

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •