호환은 import 철자보다 export 모양부터 맞춘다

런타임 값, .d.ts 선언, 소스 import가 같은 모양을 가리켜야 타입 검사와 실행 결과가 일치한다.

이름 있는 속성

exports.sum = sum

runtime module.sum

실제 객체에 sum 속성이 있다.

types export function sum()

선언도 같은 이름을 노출한다.

source import { sum } 이름 일치
단일 module.exports

module.exports = parse

runtime module = parse

내보낸 값 자체가 함수다.

types export = parse

선언이 CommonJS 값을 반영한다.

source import parse = require(...) 모양 보존

esModuleInterop의 경계 default·namespace import의 검사와 emit을 보정하지만, 없는 named export나 틀린 선언 파일을 만들어 주지는 않는다.