compilation context
컴파일 컨텍스트는 기본적으로 TypeScript가 유효한 것과 그렇지 않은 것을 결정하기 위해 구문 분석하고 분석하는 파일 그룹화에 대한 멋진 용어입니다. 어떤 파일에 대한 정보와 함께 컴파일 컨텍스트에는 사용 중인 컴파일러 옵션에 대한 정보가 포함됩니다. 이 논리적 그룹을 정의하는 좋은 방법(프로젝트라는 용어도 사용하고 싶습니다)은 tsconfig.json 파일을 사용하는 것입니다.
tsconfig schema
최상위 프로퍼티
complieOnSave, extends, compileOptions, files, include, exclude, references, typeAcquistion, tsNode
[complieOnSave]
true / false (default false)
누가?? visual stdio 2015 with typeScript 1.8.4 이상
atom-typescript 플러그인
[extends]
파일 상대 경로명 : string TypeScript 2.1 new spec
npm install --save-dev @tsconfig/deno
{
"extends": "@tsconfig/deno/tsconfig.json",
...
}
[files, include, exclude]
셋다 설정이 없으면 전부다 컴파일
files
상대 혹은 절대 경로의 리스트 배열입니다. exclude 보다 쎄다
include exclude
glob 패턴
include
exclude 보다 약하다 * 같은걸 사용하면, .ts/ .tsx/ .d.ts만 include
exclude
설정 안하면 4가지 (node_modules, bower_components, jspm_packages, <outDir>)를 default로 제외합니다.
<outDir>은 항상 제외합니다. (include에 있어도)
[compileOptions]
typeRoots, types@types typeScript 2.0부터 사용 가능해진 내장 type definition 시스템아무 설정 안하면 node_modules/@types라는 모든 경로를 찾아서 사용typeRoots를 사용하면 배열 안에 들어있는 경로들 아래서만 가져옵니다.types를 사용하면 배열 안의 모듈 혹은 ./node_modules/@types/안의 모듈 이름에서 찾아온다.[] 빈 배열을 넣는다는건 이 시스템을 이용하지 않겠다는 것입니다.TypeRoots와 types를 같이 사용하지 않습니다.
target,lib
target 버전에 따라서 컴파일 소스가 다르게 출력된다.
lib
기본 type definition 라이브러리를 어떤 것을 사용할 것이냐
lib를 지정하지 않을 때
target 이 es3이고 디폴트로 lib.d.ts를 사용
target이 es5이면 디폴트로 dom, es5, scripthost를 사용한다.
es6면 디폴트로 dom, es6, dom.iterable, scripthost를 사용한다.
lib를 지정하면 그 lib 배열로만 라이브러리를 사용한다.
outDir, outFile, rootDir
npx tsc를 하면 outDir 경로의 폴더가 생성되고 그 폴더에 결과가 지정된다.
strict
strict를 true로 설정하는게 기본이다.
엄격하게 타입을 확인하는 옵션을 활성화 한다.
--nolmplicitAny
명시적이지 않게 any 타입을 사용하여, 표현식과 선언에 사용하면 에러를 발생
타입스크립트가 추론을 실패할 경우 any가 맞으면 any로 지정
아무것도 쓰지 않으면 에러
--nolmplicitThis
명시적이지 않게 any 타입을 사용하여 this 표현식을 사용하면 에러를 발생
첫번째 매개변수 자리에 this를 넣고 this에 대한 타입을 어떤것이라도 표현하지 않으면 오류
javascript 에서는 매개변수에 this를 대체하여 함수 콜을 하는 용도로도 쓰입니다.
call/apply/bind 와 같이 this를 대체하여 함수 콜을 하는 용도로도 쓰입니다.
그래서 this 를 any로 명시적으로 지정하는 것은 합리적입니다.
--strictNullChecks
strictNullchecks 를 적용하면 모든 타입은 null,undefined 값을 가질 수 없고, 가지려면 union type을 이용하여 직접 명시해야 한다.
--strictFunctionTypes
함수 타입에 대한 bivariant 매개변수 검사를 비활성화 한다.
반환 타입은 공변적 , 인자 타입은 반공변적
타입스크립트에서 인자 타입은 공변적이면서, 반공변적인게 문제이다!
옵션을 키면 에러가 안나던걸 에러 나게 한다.
--strictPropertyinitialization
정의도지 않은 클래스의 속성이 생성자에서 초기화되었는지 확인
이 옵션을 사용하려면 --stritNullChecks를 사용하도록 설정
--strictBindCallApply
bind, call, apply 에 대한 더 엄격한 검사 수행
--alwaysStrict
각 소스 파일에 대해 javascript의 strict mode 로 코드를 분석하고 엄격하게 사용을 해제한다.
'TypeScript' 카테고리의 다른 글
Classes_1 (0) | 2021.10.28 |
---|---|
Interfaces (0) | 2021.10.27 |
타입 시스템 (0) | 2021.10.27 |
TypeScript[object, Array, Tuple, any, unknown, never, void] (0) | 2021.10.26 |
boolean, number, string, symbol, null & undefined (0) | 2021.10.26 |