[Worksheet 220502] TypeScript Compiler

방예서·2022년 5월 2일
0

Worksheet

목록 보기
23/47
TypeScript Essentials

TypeScript Compiler

Compilation Context

타입스크립트가 컴파일 할 때 어떤 파일과 어떤 방식으로 컴파일 할지 방식을 규명해둔 것이다.

tsconfig schema

https://json.schemastore.org/tsconfig

최상위 프로퍼티

  • compileOnSave

  • extends

  • CompileOptions

  • files

  • include

  • exclude

  • references

compileOnSave

파일을 컴파일하면 저장하겠다.
true/false (default false)

Who?

  • visual studio 2015 with ts 1.8.4 이상
  • atom-typescript 플러그인

extends

"extends: "부모 파일"

어떤 설정이 있는 부모 파일의 설정을 상속 받겠다. (부모 설정들)

npm install --save-dev @tsconfig/deno(부모 설정 이름)

files, include, exclude

셋 다 설정이 없으면 전부 다 컴파일 하려고 한다.

어떤 파일, 디렉토리를 컴파일할지 규정하는 프로퍼티이다.

files

상대 혹은 절대 경로의 리스트 배열이다.
exclude 보다 세다.

include

glob pattern (like .gitignore)
exclude 보다 약하다.
* 같은걸 사용하면, .ts / .tsx / .d.ts 만 include (allowJS)

exclude

설정하지 않으면 node_modules, bower_components, jspm_packages, <outDir> 를 default로 제외한다.
<outDir> 은 include에 있어도 항상 제외한다.

compileOptions

typeRoots, types

추가적으로 다른 설정을 할 때 주로 사용한다.

TS 2.0부터 사용 가능해진 내장 type definition 시스템

  • 아무 설정 안하면?
    node_modules/@types 라는 모든 경로를 찾아서 사용

  • typeRoots 사용하면?
    배열 안에 잇는 경로들 아래서만 가져온다.

  • types 사용하면?

    • 배열 안의 모듈 혹은 ./node_modules/@types/ 안의 모듈 이름에서 찾아온다.
    • [] 빈 배열을 넣는건 이 시스템을 이용하지 않겠다는 것.

* typeRoots와 types는 같이 사용하지 않는다.

target, lib

  • target
    default: "ES3"
    어떤 런타임에서 실행하게 될 지 결정해주는 요소
    빌드의 결과물을 어떤 버전으로 할 것이냐를 결정한다.

  • lib
    기본 type definition 라이브러리를 어떤 것을 사용할 것이냐를 결정한다.
    최종적으로 실행하고자 하는 기본 타입들을 결정해주는 요소
    타겟팅 당한 버전에 따라 기본이 정해진다.

outDir, outFile, rootDir

  • outDir
    이 dir에 컴파일된 최종 결과물이 저장된다.

  • outFile
    하나의 js 파일로 만들어준다.

  • rootDir
    rootDir을 지정해준다. 기본은 가장 상위 폴더이다.

strict

엄격하게 타입을 확인하는 옵션을 가능하게 할 지 결정한다.

strict 를 true로 켜야하는 이유?!

  • --noImplicitAny
    명시적이지 않게 any 타입을 사용하여, 표현식과 선언에 사용하면 에러를 발생한다.
    타입스크립트가 추론을 실패한 경우, any가 맞으면 any라고 지정

  • suppressImplicitAnyIndexErrors

  • --noImplicitThis

명시적이지 않게 any 타입을 사용하여, this 표현식에 사용하면 에러를 발생한다.
첫 번재 매개변수 자리에 this를 놓고, this에 대한 타입을 어떤 것이라도 표현하지 않으면 오류를 발생한다.

  • --strictNullChecks
    이 모드에서는 null 및 undefined 값이 모든 유형의 도메인에 속하지 않으며, 그 자신을 타입으로 가지거나 any일 경우에만 할당이 가능하다.
    가지려면 unio type을 이용해서 직접 명시해야한다.
    * 예외는 undefined에는 void 할당 가능하다.
    이 모드를 적용하지 않으면 모든 타입이 null, undefined 값을 가질 수 있게 된다. (큰 오류)
    사용하려는 함수를 선언할 때부터 리턴 값에 정확한 타입을 지정하려는 노력을 기울여야 한다.

  • --strictFunctionTypes
    함수 타입에 대한 bivariant 매개변수 검사를 비활성화한다.
    반환 타입: 공변적
    인자 타입: 반공변적
    근데 타입스크립트에서는 인자 타입이 공변적이면서 반공변적이다. 이 문제를 해결하는 옵션이다.

  • --strictPropertyInitialization
    정의되지 않은 클래스의 속성이 생성자에서 초기화되었는지 확인한다.
    이 옵션을 사용하려면 --strictNullChecks을 사용하도록 설정해야한다.

  • --strictBindCallApply
    bind, call, apply에 대한 더 엄격한 검사를 수행하는 옵션이다.

  • --alwaysStrict
    각 소스 파일에 대해 JS의 strict mode로 코드를 분석하고, "엄격하게 사용"을 해제한다.

profile
console.log('bang log');

0개의 댓글