보통 하나의 프로젝트를 생성할 때, 어플리케이션 전용으로 열거나, 문서 작성 전용으로 오픈한다.

 

하지만, 나는 유데미 강의 사이트를 들으며 얻는 지식과, 그 과정에서 짤막하게 생성하는 NestJS 프로젝트들을

 

하나의 폴더 "udemy" 에 생성했다.

 


나는 es6 구문으로 작성되는 자바스크립트에도 집중했지만,

 

타입스크립트의 구문이 es5 로 컴파일 되는 과정에서 클래스, 프로토타입 간의 chain 이 보인다는 것이 신기했다.

 

물론 이후에는 Map, Arrow 함수, Promise, async, await 을 이해하기 위해 

target 은 es6 로 설정 해 두고 컴파일 했다.

 


➜  udemy tree -L 2
.
├── docs-to-learn # JS, TS 테스팅 및 문서 작성 장소.
│   ├── 1-decorator-in-tsconfig.md
│   ├── 2-about-decorators.md
│   ├── 3-nestcli-after-tsconfig.md
│   ├── 4-private-in-js.md
│   ├── 5-what-is-sqlite.md
│   ├── 6-package-and-lock-json.md
│   ├── node_modules
│   ├── package-lock.json
│   ├── package.json
│   ├── tempTs
│   ├── test-code
│   └── tsconfig.json
└── nestjs # nest cli 를 통해 생성한 프로젝트들
    ├── di
    ├── messages
    ├── mycv
    └── scratch

10 directories, 9 files

 

직접적인 컴파일 과정은 현재 -> 부모 디렉토리 순으로 나아가며 "tsconfig.json" 을 찾기 때문에,

 

"docs-to-learn" 과 "nestjs" 는 별개의 컴파일을 실행 할 수 있었다.

 

그러나, 타입스크립트 타입 체킹을 제공하는 별도의 패키지에서 문제가 발생했다.

 

문서 작성 디렉토리인 "docs-to-learn" 에 작성한 코드 자체에 문제가 없는데, 타입에서 지속적으로 오류가 난 것이다.

 

코드의 예시는 이렇다.

 

class TestClass {
    weakMap : WeakMap<object, any>;
    constructor() {
        // 문제 발생 - new WeakMap
        this.weakMap = new WeakMap<object, any>();
    }
}

 

 

타입도 틀리지 않았는데 무엇이 문제일까?

 

문제는 바로 타입스크립트 모듈의 경로였다.

 


타입스크립트의 모듈 경로가 뭐가 문제였을까?

 

내가 마지막으로 생성한 nest 프로젝트는 "mycv" 프로젝트였다.

 

"docs-to-learn" 과는 디렉토리 자체에서 가지가 갈라짐에도 불구하고,

 

왜인지 타입 체킹 할 때에 "mycv" 프로젝트의 typescript 모듈을 참고하는 것이었다.

 

(심지어 "docs-to-learn" 에 이미 타입스크립트를 다운받은 상태)

 

"mycv" 는 내가 마지막으로 npm 명령어를 통해 실행한 프로젝트였고,

 

그 이후로는 "ts-node" 혹은 "tsc" 명령어로만 실행하여 컴파일 후, "node xxx.js" 로 결과물을 확인했다.

 

따라서 나는 IntelliJ IDEA 에디터가, 최근에 npm 으로 실행된 프로젝트를 기점으로, 

 

참고하는 타입스크립트 모듈이 실시간으로 바뀔 것이라고 예상한다. - 현재는 고쳐서 테스트는 안해봤어요

 


따라서, 나는 인텔리제이에서 타입스크립트 타입 체킹 모듈을 전역적으로 참고할 수 있게 만들기를 원했다.

 

따라서, Settings --> Language & Frameworks --> TypeScript --> Bundled (5.6.3) 

이렇게 세팅하고, "apply" 했다.

 

 

 

"Use types from server" 는 내가 직접 켰다.

 

이후, 같은 프로젝트에 서로 다른 디렉토리에서 tsconfig.json 을 사용하더라도,

타입 체크에 있어 오류가 전부 사라지는 것을 볼 수 있었다.