검색
검색
공개 노트 검색
회원가입로그인
TypeScript 정복하기: 초심자에서 전문가로

8장: 타입스크립트와 자바스크립트의 상호 운용성

TypeScript와 JavaScript의 완벽한 조화

TypeScript를 배우다 보면 반드시 맞닥뜨리는 주제가 바로 JavaScript와의 상호운용성입니다. TypeScript는 JavaScript를 확장한 언어이기 때문에, 두 세계의 장점을 모두 활용하는 것이 중요합니다. 기존 JavaScript 프로젝트에 타입의 안전함을 더하거나, TypeScript 코드에서 JavaScript 라이브러리를 활용하고자 할 때, 자연스럽고 효율적으로 두 언어를 섞어 쓰는 방법을 이해해야 합니다.

TypeScript와 JavaScript 코드의 연계

가장 큰 강점 중 하나는, TypeScript로 작성한 코드는 결국 자바스크립트로 컴파일되어 실행된다는 점입니다. 덕분에 기존에 이미 구축된 방대한 JavaScript 생태계와도 매끄럽게 연결할 수 있습니다. 예를 들어, TypeScript 파일 내에서 .js 파일을 가져오거나 그 반대로도 무리가 없습니다. 하지만 각 언어가 가진 문법적 특징과 타입 시스템의 차이로 인해 몇 가지 유의할 점도 존재합니다.

외부 JavaScript 라이브러리 활용법

TypeScript 프로젝트에 JavaScript 라이브러리를 도입하는 경우, 타입 선언이 없어 타입체크가 어렵다는 단점이 있습니다. 이럴 때는 DefinitelyTyped에서 제공하는 타입 정의 파일을 활용하거나, 직접 최소한의 타입 정보를 선언해서 예상치 못한 오류를 예방할 수 있습니다. 예를 들면:

// 타입 선언 파일이 없는 경우
// myLib.js의 함수 a를 가져온다고 가정
// 직접 타입을 선언
declare function a(param: string): number;

declare 키워드는 외부에 존재하는 자바스크립트 코드의 모양만 TypeScript에 알릴 때 사용합니다. 이런 선언만으로도 타입 추론의 장점을 최대한 누릴 수 있습니다.

JavaScript 파일을 TypeScript로 점진적으로 전환하기

이미 구축된 JavaScript 코드를 점진적으로 TypeScript로 옮길 때는, 확장자를 .ts로 바꾸고 하나씩 타입을 명확히 지정하는 전략이 권장됩니다. 코드 규모가 크다면, 단일 파일이 아닌 전체 프로젝트 단위로 tsconfig.json에서 allowJs: true 옵션을 활성화하고, 자바스크립트 파일도 프로젝트에 포함시켜 천천히 마이그레이션 할 수 있습니다.

모듈 시스템과 ESModuleInterop

최근의 TypeScript는 모듈 시스템 호환성 향상에 많은 투자를 하고 있습니다. 자바스크립트의 require, import 구문이 혼재된 환경에서는 모듈 해석에 주의가 필요합니다. esModuleInterop 옵션을 활성화하면 CommonJS와 ES모듈을 자연스럽게 호환할 수 있어서, 다양한 환경에서 인터페이스가 깔끔하게 맞아떨어집니다.

상호 운용성 최적화 전략

  • 외부 JS 코드를 가져올 때는 타입 선언 파일을 적극 활용하거나 any, unknown 타입을 임시로 부여함으로써 오류에 미리 대비하세요.

  • 동일 프로젝트 내 TypeScript와 JavaScript 파일을 섞는 경우, 점진적으로 타입을 추가해 나가는 것이 부담을 크게 줄여줍니다.

  • 모듈 해석 충돌이나 import/export 에러가 자주 발생한다면, esModuleInterop, allowJs 등 tsconfig의 설정을 적극적으로 실험해 보세요.

  • 코드베이스가 커질수록 타입 정의를 체계적으로 관리하는 것이 장기적으로 유지보수의 핵심이 됩니다.

한 단계 더 나아가는 개발자의 자세

TypeScript와 JavaScript의 경계는 생각보다 명확하지 않습니다. 자유롭게 코드를 오가는 유연성과, 타입 시스템이 제공하는 엄격함을 균형있게 활용한다면, 어떤 환경에서도 안정적이고 강력한 애플리케이션을 만들 수 있습니다. 모범 사례와 실전 경험을 차근차근 쌓아가다 보면, 두 언어를 아우르는 진정한 전문가로 거듭날 수 있습니다.


공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기