"타입 import, 값 아님. Compiler 가 runtime 에 실제로 안 쓰는 거 erase 가능."
`import type` 가 뭐 함
import type { User } from './types' 가 타입만 import. Compile 시점에 TypeScript 가 dependency 기록. Emit 시점에 import 가 완전히 제거 — runtime 비용 없음, bundler 비용 없음, 타입만 필요했는데 우발적으로 heavy module 포함 위험 없음.
쓸 때:
- Import 하는 게 타입 annotation 으로만 쓰임 (함수 parameter, return 타입, generic).
- Source module 에 trigger 되길 원치 않는 side effect 있음 (예: import 시 global 등록하는 module).
- 한 방향이 type-only 인 circular dependency 깨려고 시도.
Inline type import
TypeScript 4.5 부터 한 statement 에 값과 타입 import 섞을 수: import { Foo, type Bar } from './mod'. `type` prefix 가 개별 item 을 type-only 로 표시. 나머지가 값 import. 단일 module 이 너 필요한 runtime 값과 타입 둘 다 export 할 때 편리.
verbatimModuleSyntax (tsconfig)
`verbatimModuleSyntax` compiler 옵션 (TypeScript 5.0+) 이 import/export emission 을 predictable 하게: `import type` 와 `export type` 만 erase; 나머지 다 유지. TypeScript 의 옛 'isolated module' heuristic 이 쓰이지 않는다고 생각한 import erase 한 surprise 피함. Modern 프로젝트가 활성화 해야.
Import 가 타입-전용일 때마다 `import type` 써. Emit 된 JavaScript 가 더 lean 유지, tree-shaking 더 깨끗, circular dependency 관리 더 쉬워짐.