본문 바로가기

TypeScript

타입 스크립트 구성 옵션

타입 스크립트의 tsconfig.json 파일에 작성하는 구성 옵션에 대해 코드에서 주석과 함께 정리하도록 하겠습니다.

 

 

tsconfig.json 파일은 크게 세 가지 옵션 compilerOptions, include, exclude으로 구분할 수 있습니다.

{
  "compilerOptions": {
    "target": "ES2015", // TS를 JS로 변환
    "module": "ESNext", // JS의 가장 최신 버전으로 모듈 사용
    "moduleResolution": "Node", // 모듈의 해석 방식 지정
    "esModuleInterop": true, // JS의 ESM 방식과 node,js의 Commonjs 방식을 호환
    "lib": ["ESNext", "DOM"], // TS가 JS로 코드를 컴파일할 때 내부적으로 사용하는 라이브러리 목록 지정
    "strict": true // TS의 문법을 최대한 엄격하게 사용
  },
  // 프로젝트의 어느 부분에서 TS를 찾을 수 있는지 경로 지정
  "include": ["src/**/*.ts"],
  // 컴파일할 때 제외할 경로 명시
  "exclude": ["node_modules"]
}

*위의 옵션은 최소한은 옵션이자 중요한 옵션입니다.

 

 

  • compilerOptions : 만들어진 타입스크립트의 코드를 자바스크립트로 변환하기 위해 작성하는 옵션입니다.
{
  "compilerOptions": {
    // 컴파일될 ES(JS) 버전 명시 - "ES2015" 권장
    "target": "ES3",

    // 모듈 시스템 지정 - "CommonJS", "AMD", "ESNext"
    "module": "CommonJS",

    // 모듈의 해석 방식 지정 - "Node", "Classic"
    // Node의 경우 파일명이 index인 파일에서 모듈 가져오기 시 경로 작성할 때 index(파일 명) 생략 가능
    "moduleResolution": "Node",

    // ESM 모듈 방식의 호환성 활성화 여부 - true, false
    // CommonJS의 경우 이름을 가진 내보내기(module.exports)만 가능하고, ESM의 경우 이름을 가진 내보내기(export default), 기본 내보내기(export) 모두 가능
    // esModuleInterop을 true로 설정해줘야 ESM의 내보내기 사용 가능하고 CommonJS의 내보내기 사용도 가능
    "esModuleInterop": false,

    // 모든 파일을 모듈로 컴파일하며 import 혹은 export 키워드가 모든 타입스크립트에 지정이 되어져 있어야 함 - true, false
    // isolatedModules를 true로 설정해주게 되면 모든 파일은 모듈이어야 합니다.
    "isolatedModules": false,

    // 모듈 해석에 사용할 기준 경로 지정
    // 일반적인 경우 tsconfig.json 파일이 루트 경로에 있지만, 상황에 따라 특정 폴더 안에 있을 수 있음
    "baseUrl": "./",

    // 컴파일러가 참조할 타입 선언(d.ts)의 경로 지정
    // Definitely Typed 설치 시 node_modules 폴더의 @types폴더에 설치가 되는데 해당 경로에서 타입을 참조함
    "typeRoots": ["./node_modules/@types"],
    // 별도의 d.ts 파일 관리시 아래와 같은 경로 지정 가능
    //   "typeRoots": ["./node_modules/@types", "./src/types"],

    // TS가 JS로 코드를 컴파일할 때 내부적으로 사용하는 라이브러리 목록 지정
    // "ESNext" : JS 최신 버전, "DOM" : 브라우저에서 동작 가능한 JS
    "lib": ["ESNext", "DOM"],

    // TS의 문법을 최대한 엄격하게 사용 = true, false
    // TS의 경우 타입에 대한 엄격함이 필수이기 때문에 strict을 true로 설정하고 사용하는 것을 권장
    //  strict을 true로 설정할 경우 아래의 모든 옵션 자동으로 true로 설정
    "strict": false,

    // 암시적 any 타입 검사 활성화
    "noImplicitAny": false,

    // 암시적 this 타입 검사 활성화
    "noImplicitThis": false,

    // 엄격한 Nullish 타입 검사 활성화
    "strictNullChecks": false,

    // 엄격한 함수의 매개 변수 타입 검사 활성화
    "strictFunctionTypes": false,

    // 엄격한 클래스의 속성 초기화 검사 활성화
    "strictPropertyInitialization": false,

    // 엄격한 Bind, Call, Apply 메소드의 인수 검사 활성화
    "strictBindCallApply": false
  },

*위의 compilerOptions은 존재하는 모든 옵션은 아니며, 작성된 설정값은 각 옵션의 기본값입니다.

 

  • include : 어떤 타입스크립트 파일을 컴파일해서 자바스크립트로 변환할 것인지 파일에 대한 경로를 배열로 목록화해서 제공합니다.
 "include": ["src/**/*.ts"],

위의 경우 src 폴더 내부에 있는 모든 하위 경로의 모든 이름을 가질 수 있는 확장자가 ts인 파일을 자바스크립트로 컴파일함을 의미합니다.

필요시 위의 방식으로 새로운 폴더와 경로, 파일명을 명시하여 제공할 수 있습니다.

 

 

  • exclude : 최종적으로 자바스크립트로 컴파일할 때 컴파일에서 제외할 파일에 대한 경로를 배열로 목록화해서 제공합니다.
 "exclude": ["node_modules"]

위의 경우 node_modules를 컴파일 대상이 되지 않도록 경로를 명시해준 것입니다. 

'TypeScript' 카테고리의 다른 글

인터페이스와 클래스  (0) 2023.01.05
열거형 타입 (Enum)  (0) 2023.01.04
타입 가져오기 / 내보내기  (0) 2023.01.03
패키지의 타입 선언  (0) 2023.01.03
제네릭 (Generic) - Updated keyof 제약 조건  (0) 2023.01.03