- 📚 학습기간
- 1주차: 기본 원칙과 타입 시스템의 기초 (1장, 2장)
- 2주차: 타입 추론과 올바른 타입 설계 (3장, 4장)
- 3주차:
any다루기와 라이브러리 사용법 (5장, 6장) - 4주차: 실행 환경과 마이그레이션 전략 (7장, 8장)
- 😎 미션 수행 기간 : 5 ~ 8주 / 상세 진행 방법 및 미션 내용 추후 공개 예정
docs/week{주차}/item{범위(예시: 1-5)}.md파일에 정리 내용을 올린다.
가장 중요한 주차입니다. 타입스크립트가 자바스크립트와 어떻게 다른지, 그리고 **'타입을 집합으로 본다'**는 관점을 확실히 잡아야 합니다.
| 발표자 | 담당 아이템 | 핵심 키워드 |
|---|---|---|
| 멤버 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를 집합(공집합, 전체집합 등)으로 설명해보기.
타입스크립트가 코드를 어떻게 해석하는지(추론) 이해하고, 이를 바탕으로 깔끔한 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)
불가피하게 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의 발표가 난이도가 높습니다)
실제 브라우저 환경(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으로 대체하는 방법 알아보기.
- 마이그레이션 전략: 본인들의 프로젝트나 가상의 프로젝트를 가정하고, 어떤 순서로 파일을 전환할지 시나리오 짜보기.
-
📦 프로젝트명: Type-Safe Logistics (타입 안전한 물류 시스템)
-
🛠️ 진행방식:
-
- 각 주차별 요구사항을 상세히 구현합니다.
-
- 서로의 코드를 리뷰합니다.
-
- 매주 모임 시간에 각자의 코드를 발표하고 리뷰를 기반으로 의논합니다.
-
-
✅ 완료 기준
- 각 주차별로 제공되는 검증 조건(REQ-XXX)을 모두 통과해야 합니다.
- TypeScript 컴파일 에러가 예상대로 발생하는지 확인
- 실행 시 올바른 결과가 출력되는지 검증
- 금지된 패턴(
any,as등)을 사용하지 않았는지 체크
- 각 주차별로 제공되는 검증 조건(REQ-XXX)을 모두 통과해야 합니다.
학습 목표
readonly를 활용한 불변성 보장- 구조적 타이핑 이해
any타입 완전 배제
미션 요약
상품 재고를 관리하는 시스템을 구현하며, TypeScript의 불변성 개념을 체득합니다.
데이터가 실수로 변경되는 것을 컴파일 타임에 방지하는 방법을 배웁니다.
실무 연관성: Redux state, React props, API 응답 객체 등 불변 데이터 관리
학습 목표
- 제네릭 타입
<T extends Entity>활용 Partial<T>,keyof T등 타입 연산자 사용- 타입 안전한 유틸리티 함수 작성
미션 요약
어떤 타입이든 저장하고 검색할 수 있는 범용 Repository를 제네릭으로 구현합니다.
코드 재사용과 타입 안전성을 동시에 확보하는 방법을 익힙니다.
실무 연관성: ORM, API 클라이언트, 공통 유틸리티 라이브러리
학습 목표
- Discriminated Union 타입 활용
- 타입 시스템으로 불가능한 상태 방지
- 타입 좁히기 (Type Narrowing) 마스터
미션 요약
주문의 생애주기(pending → paid → shipped → delivered)를 타입으로 표현합니다.
"결제하지 않고 배송"같은 논리적으로 불가능한 상태를 컴파일 타임에 차단합니다.
실무 연관성: 상태 관리, 워크플로우 시스템, 폼 단계 처리
학습 목표
unknown타입 안전하게 다루기- 타입 가드 (Type Guard) 직접 구현
- 타입 단언(
as) 없이 안전하게 처리
미션 요약
외부 결제 API의 응답을 unknown으로 받아 타입 가드로 검증합니다.
런타임에 발생할 수 있는 모든 예외 케이스를 타입 시스템과 함께 처리하는 방법을 배웁니다.
실무 연관성: 외부 API 연동, JSON 파싱, 사용자 입력 검증