---
type: snippet
tags: [typescript, tsconfig]
status: release
ctime: 2025-12-26
mtime: 2025-12-26
---

tsconfig 핵심: target, lib, module

```
TypeScript (.ts)
    ↓
lib: 타입 체크 시 뭘 알고 있나? (Promise, Map 등)
    ↓
target: 문법을 얼마나 낮출 건가? (ES2020 → ?. 그대로, ES2019 → 삼항연산자로)
    ↓
module: import/export를 뭘로? (CommonJS → require, ESNext → import)
    ↓
JavaScript (.js)
```

target vs lib 분리 이유: 문법(syntax)과 API(runtime)는 다름

- `?.` → target이 변환 (문법)
- `Promise` → 폴리필이 해결 (API)

```json
{
  "target": "ES2019", // 하위호환 (optional chaining 이전)
  "module": "ESNext", // 트리쉐이킹 가능
  "lib": ["ES2020", "DOM"], // 타입은 넉넉하게
  "moduleResolution": "Node"
}
```

> [!CAUTION]
> TS 버전 올리면서 target 그대로 두면 Webpack4 같은 구형 번들러에서 파싱 실패할 수 있음.
