점진적 마이그레이션을 위해 자바스크립트와 타입스크립트를 동시에 사용할 수 있게 allowJs 컴파일러 옵션을 사용하자
대규모 마이그레이션 작업을 시작하기 전에, 테스트와 빌드 체인에 타입스크립트를 적용해야 한다.
의존성과 관련된 오류 없이 작업하려면, 다른 모듈에 의존하지 않는 최하단 모듈부터 작업을 시작해서 의존성이 최상단에 있는 모듈을 마지막으로 완성해야 한다.
ex) lodash 라이브러리 사용
npm install --save-dev @types/lodash
@types/lodash는 lodash의 타입 정보를 담고 있으며, 타입 정보는 lodash 라이브러리를 사용하는 모든 부분에 적용된다.
❗ 타입스크립트로 전환하며 발견하게 되는 오류
자바스크립트는 클래스 멤버 변수를 선언할 필요가 없지만, 타입스크립트에서는 명시적으로 선언해야 한다.
class Greeting {
greeting: string;
name: any;
constructor(name) {
this.greeting = "Hello";
this.name = name;
}
greet() {
return this.greeting + " " + this.name;
}
}
const state = {};
state.name = "New York"; // ❌ '{}' 유형에 'name' 속성이 없습니다.
state.capital = "Seoul"; // ❌ '{}' 유형에 'capital' 속성이 없습니다.
const state = {
name: "New York",
capital: "Seoul",
}; // 정상
interface State {
name: string;
capital: string;
}
const state = {} as State;
state.name = "New York"; // 정상
state.capital = "Seoul"; // 정상
noImplicitAny 설정을 활성화하여 마이그레이션의 마지막 단계를 진행해야 한다. noImplicitAny 설정이 없다면 타입 선언과 관련된 실제 오류가 드러나지 않는다.
noImplicitAny를 전면 적용하기 전에 로컬에서부터 타입 오류를 점진적으로 수정해야 한다. 엄격한 타입 체크를 적용하기 전에 팀원들이 타입스크립트에 익숙해질 수 있도록 시간을 주자.