tsconfig 와 컴파일
설정 파일이 무엇을 정하고, 어떻게 JavaScript 로 바뀌는지 봅니다.
설정 파일이 규칙을 정합니다
지금까지 이 화면에서 실행한 것들은 정해진 설정으로 검사되었습니다. 실제
프로젝트에서는 그 설정을 tsconfig.json 에 적습니다.
이 단원의 코드 상자에는 실행 단추가 없습니다. 설정과 명령은 브라우저 안에서 해 볼 수 있는 것이 아니기 때문입니다.
# 설치합니다. 프로젝트마다 따로 두는 것이 보통입니다. npm install --save-dev typescript # 설정 파일을 만듭니다. npx tsc --init # 검사하고 JavaScript 로 바꿉니다. npx tsc
무엇을 정하나
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"strict": true,
"outDir": "dist",
"lib": ["ES2020", "DOM"]
},
"include": ["src"]
}
| 이름 | 정하는 것 |
|---|---|
target | 어느 시대의 JavaScript 로 바꿀지입니다. 낮게 잡으면 옛 브라우저에서 돌지만 코드가 길어집니다 |
module | 모듈을 어떤 방식으로 내보낼지입니다(JS 6.4) |
strict | 엄격한 검사를 한꺼번에 켭니다. 아래에서 따로 봅니다 |
outDir | 바뀐 파일을 어디에 놓을지입니다 |
lib | 어떤 타입 정의를 함께 쓸지입니다. DOM 을 빼면 document 를 사용할 수 없습니다 |
include | 어떤 파일을 검사할지입니다 |
strict 가 켜는 것들
strict: true 는 여러 검사를 한 번에 켭니다. 이 트랙의
예제들이 오류를 낸 것도 그 덕입니다.
| 설정 | 없으면 |
|---|---|
strictNullChecks | 1.6 의 오류가 하나도 나지 않습니다. 모든 타입에 null 이 담길 수 있게 됩니다 |
noImplicitAny | 2.1 에서 매개 변수에 타입을 적지 않아도 조용히 any 가 됩니다 |
strictFunctionTypes | 함수를 넘길 때 매개 변수 타입을 느슨하게 봅니다 |
strictPropertyInitialization | 클래스 필드를 채우지 않아도 지나갑니다(3.5) |
새 프로젝트는 켜고 시작합니다. 나중에 켜면 한꺼번에 오류가 쏟아져 손대기 어려워집니다. 이미 있는 코드에 붙이는 방법은 다음 단원에서 봅니다.
요즘은 tsc 로 바꾸지 않기도 합니다
tsc 는 검사와 JavaScript 로 바꾸기를
함께 합니다. 그런데 요즘 도구(Vite · esbuild · swc)는 바꾸는 일을 훨씬 빠르게
합니다. 그래서 이렇게 나눠 쓰는 것이 흔합니다.
- 바꾸기는 빠른 도구가 합니다. 타입은 그냥 지웁니다.
- 검사는
tsc --noEmit이 따로 합니다.
{
"scripts": {
"dev": "vite",
"build": "tsc --noEmit && vite build",
"typecheck": "tsc --noEmit --watch"
}
}
이 화면도 같은 방식입니다. 검사와 바꾸기를 따로 부르고, 검사에서 걸리면 실행하지 않습니다.
처음에 자주 걸리는 것
tsc 는 타입 오류가 있어도 JavaScript 를
내놓습니다. 막으려면 noEmitOnError 를 켭니다.
빌드가 통과했다고 오류가 없는 것은 아닙니다.
편집기가 다른 TypeScript 판을 사용하고 있으면 오류가 서로 다릅니다. VS Code 는 "TypeScript: Select Version" 에서 프로젝트에 설치한 것을 고르게 할 수 있습니다.
ES5 로 잡으면 async
하나에도 긴 코드가 만들어집니다. 지원해야 할 브라우저를 확인하고
필요 이상으로 낮추지 않습니다.
이 단원의 정리
- 규칙은
tsconfig.json에 적습니다. strict는 엄격한 검사를 한꺼번에 켭니다. 새 프로젝트는 켜고 시작합니다.target은 어느 시대의 JavaScript 로 바꿀지입니다.- 오류가 있어도 파일은 만들어집니다. 막으려면 따로 설정합니다.
- 요즘은 바꾸기는 빠른 도구가, 검사는
tsc --noEmit이 맡습니다.