노트

tsconfig 핵심 옵션

TSConfig

프런트엔드#ts#tooling · 연결된 개념 7개

쉽게 말하면

tsconfig는 TypeScript 컴파일러에게 어떤 파일을, 얼마나 깐깐하게 검사하고, 결과를 어디로 내보낼지 알려 주는 작업 지시서예요. strict를 켜면 깐깐한 검사 규칙 여러 개가 한꺼번에 켜져요.

비유가 깨지는 곳 strict는 규칙 하나가 아니라 noImplicitAny, strictNullChecks 같은 옵션의 묶음이에요. noUncheckedIndexedAccess처럼 묶음 밖이라 따로 켜야 하는 옵션도 있고, TS 6.0부터는 strict가 기본값이에요.

tsconfig.json은 TypeScript 컴파일러(tsc)에게 어떤 파일을, 어떤 규칙으로 검사하고, 무엇을 출력할지 알려 주는 프로젝트 설정 파일이다. tsc --init으로 만들고, 이 파일이 있으면 tsc만 쳐도 프로젝트 전체를 컴파일한다(-w는 감시 모드, watch mode).

범위와 출력

  • include·exclude: 검사할 파일 패턴. 둘이 겹치면 include한 뒤 exclude한다
  • target: 출력할 JS(JavaScript) 버전(다운레벨링 기준). lib: 쓸 수 있는 내장 API(Application Programming Interface) 선언(생략하면 target에 맞춰짐)
  • rootDir·outDir: 소스와 출력 위치(src → dist)
  • sourceMap: 브라우저 디버거에서 원본 TS를 보게 하는 .map 파일 생성
  • noEmitOnError: 타입 에러가 있으면 JS를 내보내지 않음(기본은 에러가 있어도 내보냄). 아예 출력하지 않는 noEmit도 있다
  • declaration: 라이브러리용 .d.ts 생성(선언 파일(.d.ts)과 declare)

strict 묶음

"strict": true 하나가 아래를 한꺼번에 켠다. TypeScript 6.0부터는 기본값이 true다(2026 기준). 이전 버전이라면 직접 켜고 시작한다.

  • noImplicitAny: 추론할 수 없어 암묵적으로 any가 된 곳을 에러로
  • strictNullChecks: null·undefined를 별도 타입으로 다룬다. 꺼져 있으면 querySelector() 결과를 확인 없이 써도 통과한다(옵셔널 체이닝과 null 병합 연산자)
  • strictFunctionTypes: 함수 매개변수를 반공변으로 검사(공변성과 반공변성)
  • strictBindCallApply, strictPropertyInitialization, noImplicitThis, useUnknownInCatchVariables(any와 unknown), strictBuiltinIteratorReturn, alwaysStrict

strict에 들어 있지는 않지만 많이 켜는 옵션으로 noUnusedLocals, noUnusedParameters, noImplicitReturns, noUncheckedIndexedAccess가 있다. 파일 단위 변환 도구와 맞추는 옵션은 verbatimModuleSyntax와 import type에 정리했다.

출처: TSConfig Reference · strict

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • TypeScript 클래스 문법

    TypeScript는 JavaScript 클래스에 접근 제어자(Access Modifier), readonly, 추상 클래스(Abstract Class), 생성자 매개변수 프로퍼티(Parameter Properties) 같은 타입 수준 문법을 더한다. 이들은 컴파일 때 검사에만 쓰이고, 출력 JS에서는 대부분 사라진다.

  • enum과 as const 객체

    TypeScript의 enum은 관련된 상수 집합에 이름과 타입을 함께 주는 문법이다. 다른 TS 타입과 달리 런타임 객체로 컴파일되어 남는다. 요즘 프런트엔드에서는 같은 일을 as const 객체와 유니언 타입으로 하는 경우가 많다.

  • 타입 추론과 타입 검사

    타입 추론(Type Inference)은 표기가 없어도 컴파일러가 값의 타입을 정하는 단계이고, 타입 검사(Type Checking)는 정해진(추론됐거나 명시된) 타입을 코드가 지키는지 확인하는 단계다. 보통 추론이 먼저 일어나고, 그 결과를 기준으로 검사한다.

  • type과 interface

    type(타입 별칭, Type Alias)과 interface는 둘 다 타입에 이름을 붙이는 방법이다. 객체 모양을 정의할 때는 대부분 바꿔 써도 되지만, 확장 방식과 표현 범위가 다르다.

  • NestJS

    NestJS는 TypeScript를 전제로 모듈·의존성 주입(Dependency Injection, DI)·데코레이터(decorator) 구조를 제공하는 Node.js 서버 프레임워크다. 2017년 Kamil Myśliwiec가 만들었고, 구조를 강제하는 방식 때문에 흔히 "Node.js의 Spring"이라 불린다.

보기 옵션