컴파일 출력
tsconfig의 module 값이 require 또는 import 출력을 결정한다.
import 문법이 맞아 보여도 출력 JavaScript, Node.js 해석 방식, .d.ts의 export 모양이 어긋나면 실행 중 undefined나 any 누수가 발생한다.
tsconfig의 module 값이 require 또는 import 출력을 결정한다.
package.json type과 확장자가 CJS, ESM 판정을 바꾼다.
@types와 직접 선언이 import 가능 형태를 알려준다.
export 모양과 import 형태가 맞음
default import가 실제 default를 가정함
named, namespace, default 중 하나로 좁힌다.
const lib = require("lib")
출력은 CJS인데 런타임은 ESM으로 읽음
dist 파일의 require, import 보존 여부를 본다.
Node 로더가 출력 형식과 일치
Cannot use import 또는 undefined
package.json type, 확장자, 실행 명령을 확인한다.
@types가 실제 export를 반영
any 또는 잘못된 default 선언
declare module로 런타임 모양을 보정한다.
module, moduleResolution, esModuleInterop을 한곳에서 본다.
출력 파일이 require 기반인지 import 기반인지 확인한다.
같은 출력 파일을 실제 실행 명령으로 재현한다.
@types가 없거나 틀리면 선언 파일을 직접 좁힌다.
출력, 로더, 타입 선언이 같은 모듈 모양을 가리킨다.
타입은 통과하지만 실행 환경에서만 깨진다.
옵션 변경보다 출력 파일과 선언 형태 확인이 먼저다.