같은 import도 출력 형식과 런타임 규칙이 함께 맞아야 한다

TypeScript는 모듈 구문을 검사하지만, 실제 로딩 방식은 컴파일 출력과 Node.js 패키지 경계가 결정한다.

TypeScript sourceimport value from "legacy-lib"

module: "CommonJS"

ES 모듈 구문을 CommonJS 호출로 변환한다.

import value from "legacy-lib"
const value = require("legacy-lib")

module: "ESNext"

구문을 보존해 Node.js나 번들러가 해석한다.

import value from "legacy-lib"
import value from "legacy-lib"
ResolutionmoduleResolution이 파일·패키지 탐색 규칙과 맞는가
Interopdefault export가 없는 CommonJS라면 esModuleInterop 계약을 확인한다
Package boundarypackage.json type, 확장자, 실제 exports가 출력 형식과 같은가