index.html
<!DOCTYPE html>
<html lang="en">
<body>
hello
<script type="module" src="./main.js"></script>
</body>
</html>
main.ts
import _ from "https://esm.sh/lodash@4.17.21";
const result = _.flattenDeep([1,2,[3,[4]]]);
console.log(result);

이것은 브라우저에서 ESM CDN을 통해 lodash를 직접 불러와서 실행하는 경우. 즉, 번들러 없이 브라우저가 직접 URL을 통해 모듈을 로딩하는 방식이다.
다운받은 모듈은 Javascript이므로 타입이 없다.
flattenDeep함수의 인자 타입, 반환타입을 알 수 없다. 따라서 해당 함수에 대한 타입정보를 가지고있어야한다.
npm i 로 타입을 설치하고, 타입에 대한 정보를 tsconfig.json에 명시하여 해결한다.
npm install --save-dev @types/lodash
tsconfig.json
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"outDir": "./", // main.js로 출력
"rootDir": "./",
"strict": true,
"esModuleInterop": true,
"baseUrl": ".", // 현재 디렉토리를 기준으로 상대 경로 지정
//"paths"를 사용할 때는 baseUrl이 반드시 지정되어 있어야 하며, 경로는 baseUrl을 기준으로 상대 경로여야 함
"paths": {
"https://esm.sh/lodash@4.17.21": [
"node_modules/@types/lodash/index.d.ts"
]
}
},
"include": ["./main.ts", "./utils.ts"],
"exclude": []
}
실무로 통하는 타입스크립트
1.9 URL 로 ecmaScript 모듈 타이핑하기