TypeScript 프로젝트를 시작하면 반드시 마주치는 tsconfig.json
파일. 이 파일은 TypeScript 컴파일러의 행동을 설정하는 핵심 도구입니다.
많은 개발자들이 기본 설정을 그대로 사용하거나 설정 내용을 깊이 이해하지 못한 채 넘어가곤 합니다. 하지만 tsconfig.json
을 제대로 활용하면 프로젝트의 유지보수성과 효율성이 크게 향상될 수 있습니다.
이번 글에서는 tsconfig.json
의 생성 과정, 주요 옵션, 그리고 효과적인 설정 방법에 대해 알아보겠습니다.
사실 tsconfig.json
파일을 생성하지 않아도 tsc
를 사용할 수 있습니다.tsc
를 사용하여 TypeScript 파일을 JavaScript 파일로 컴파일 할 수 있습니다.
tsc index.ts
위의 명령어를 입력하면 index.js
파일이 생성됩니다. 이름을 다르게 하고 싶으면 tsc --outFile main.js index.ts
명렁어를 사용할 수 있습니다.
이처럼 tsconfig.json
파일이 없어도 tsc
를 사용할 수 있지만 왜 tsconfig.json
을 설정할까요?
매번 명렁어에 옵션을 주기 번거로우며 프로젝트에서 설정을 일정하게 유지시키기 위해서 사용합니다.
{
"compilerOptions": {},
"files": [
"login.ts",
"logout.ts",
"posts.ts",
"comments.ts",
"challenges.ts",
]
}
files
를 사용하여 우리가 원하는 파일만 tsc
가 처리하도록 설정할 수 있습니다.
{
"include": ["src/**/*", "tests/**/*"]
}
include
를 통해서 patter 형태로 원하는 파일 목록을 지정할 수 있습니다. include
와 exclude
는 glob 패턴을 지원합니다.
*
없거나 하나 이상의 문자열과 일치 (디렉터리 구분자 제외)?
하나의 문자와 일치 (디렉터리 구분자 제외)**/
단계에 관계없이 아무 디렉터리와 일치만약 glob 패턴에 파일 확장자를 선언하지 않으면 TypeScript가 지원하는 확장자만 포함합니다.
allowJs
를 활성화 하면 .js
.jsx
파일도 포합합니다.
❗️ include
를 지정해도 files
에 지정한 파일들은 제외되지 않습니다.
include
에 지정한 파일이나 패턴을 제외시킬 수 있습니다. 하지만 include
에 지정하지 않은 파일은 적용되지 않습니다.
exclude
를 지정하지 않으면 node_modules, bower_components, jspm_pacages와 outDir
에 지정한 경로가 기본값으로 설정됩니다.
{
"include": ["src/**/*"],
"compilerOptions": {
"target": "ES6",
"module": "ES2015",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"outDir": "dist",
"noUncheckedIndexedAccess": false,
"lib": ["DOM","ES2022"]:
}
}
target
을 통해서 tsc
가 최종적으로 컴파일 하는 결과물의 문법 형태를 결정할 수 있습니다.
화살표 함수가 생긴 ES6
이전 버전인 ES5
를 선택했다면 ()=>{}
와 같은 화살표 함수는 모두 function
표현법으로 변환될 것입니다.
기본 값은 ES3
이기 때문에 ES3
에 없는 기능을 코드에 작성하면 컴파일러는 에러를 출력합니다.
컴파일된 결과물이 사용하게 될 module 방식을 지정합니다.
TypeScript에서 CommonJS와 ES6 모듈 간의 호환성을 높이기 위해 사용됩니다.
esModuleInterop을 true
로 설정하면, require로 가져온 CommonJS 모듈을 더 자연스럽게 사용할 수 있습니다.
파일 이름 대소문자를 엄격히 구분합니다. 이 설정을 활성화하면 Windows 환경에서도 대소문자 불일치로 인한 오류를 방지할 수 있습니다.
TypeScript의 엄격한 타입 검사 모드를 활성화합니다. strict를 true로 설정하면 기본적으로 noImplicitAny
, strictNullChecks
, strictFunctionTypes
과 같은 설정이 활성화됩니다.
타입 선언 파일(.d.ts)의 타입 검사를 건너뛰도록 설정하는 옵션입니다.
files
와 include
를 통해서 선택된 파일들의 결과가 저장되는 디렉터리를 지정합니다.
dist
로 입력하고 컴파일하면 dist라는 폴더에 결과가 저장됩니다.
객체나 배열에 인덱스 접근을 할 때 undefined 가능성을 자동으로 포함하도록 강제하는 설정입니다.
lib
은 프로젝트에서 사용할 수 있는 특정 기능에 대한 문법을 추가합니다. 설정하는 target
에 따라서 기본으로 설정되는 lib
이 달라집니다.
lib
을 ["DOM"]
과 같이 지정하면 DOM관련 API의 타입을 사용할 수 있습니다. 배열 형태로 여러 개의 문법을 추가할 수 있습니다.
TypeScript 프로젝트에서 JavaScript 파일을 함께 컴파일 할 수 있도록 합니다.
true
로 설정하면 .js, .jsx 파일을 컴파일할 수 있습니다.
allowJs
와 함께 사용되며 JavaScript 파일에 TypeScript의 타입 검사를 적용할 수 있습니다.
true
로 설정하면 TypeScript는 .d.ts
형식으로 타입 선언 파일을 자동으로 생성합니다.
true
로 설정하면 TypeScript는 .js
파일과 함께 .map
파일을 생성합니다. .map
파일은 디버깅 시 TypeScript 코드로 되돌아갈 수 있도록 도와줍니다.
true
로 설정하면 코드에서 주석을 제거할 수 있습니다. 코드의 크기를 줄이거나 배포용 빌드에서 주석을 제거하고 싶을 때 유용합니다.
TypeScript가 JavaScript 파일을 생성하지 않도록 설정합니다.
이외에도 많은 속성들이 있습니다. 위에서 언급된 compilerOptions
설정들은 프로젝트의 빌드 환경을 세부적으로 조정할 수 있게 해줍니다. TypeScript를 사용하는 프로젝트에 적합한 설정을 선택하여 효율적이고 오류 없는 개발을 할 수 있도록 도와줍니다.
✅ 참고