https://github.com/tsconfig/bases/ : 이 Recommendations로 프로젝트 진행할 수 있도록 하자.
- noImplicitAny: 암묵적 any란 없다. 추론이 불가능한 상황(ex. 함수 매개변수)엔 뭐라도 타입을 달아라.
- noImplicitReturns: 암묵적 return 이란 없다. 뭐라도 반드시 리턴하라.
- strictNullChecks:
null
, undefined
를 항상 서브타입으로 할당 가능하게 할건지 설정.
// true 라면 아래와 nullable할때 아래와 같이 유니온으로 타입설정 해줘야함.
let assign_name: string | null = null;
if (!assign_name) {
assign_name = '미네랄';
}
- allowSyntheticDefaultImports:
~.d.ts
파일을 읽어들일때 default export가 없다면 이를 가상으로 만들어준다. import * as Module 이라고 하면 모든 모듈을 불러들여오기 때문에 매우 비효율적인데, 이를 해결하기 위함이다.
- esModuleInterop: ESM과 commonJS import 이슈를 해결해준다. 그게 뭔지는 좀 잘 이해가 안가지만 나중에 다시 학습해보자. (https://velog.io/@juunini/tsconfig.json-Interop-Constraints)
allowSynthticDefaultImports
를 true
로 만들어주니 이 옵션으로 퉁치자. 암튼 이걸 켜둬야 한다는건 일단 분명함. d.ts 파일에서 default export 하려면 이 옵션 켜줘야함. default 를 해주려면 이걸 켜야한다는 사실만 일단 기억하자. DefinitelyTyped 에 PR 하려면 이거 꺼줘야 하는데 그때는 export=
문법(옛날문법)을 사용하면 됨.
- rootDir vs include: rootDir은 컴파일이 되는 대상의 루트를 지정하는것. include 는 그 중에서 어느걸 컴파일할지 정하는것. include는 타입체크 범위를 지정하는 역할을 하기도 한다. 예를들어 rootDir 이외에 include 를 했다면, 컴파일에 참여는 안하지만 타입체크는 함. include 가 좀 더 범위가 큰 느낌??
- include: typescript의 영향력을 행사할 범위를 지정하는것. 확장명을 정해주지 않으면
.ts
나 .tsx
가 참여하지만, allowJs
옵션을 켜면 .js
나 .jsx
도 같이 참여하게 된다.
- exclude: include 된 파일중에서 exclude 할 것을 정하는것
- allowJS vs checkJs: allowJs 는 js도 컴파일 대상에 포함시키겠다는 옵션이고, checkJs는 자바스크립트 타입체킹 룰에 따라 JS도 타입체킹을 하겠다는 의미이다. 문서에 나와있기론 allowJs를 해야 checkJs가 동작한다고 하지만, 일단 내가 checkJs만 true를 한 결과 잘 동작했었다
원인 찾았다. allowJs는 default가 true이기 때문에 동작했던 것이었다. false로 바꾸면 바로 에러 뜬다.