- 2023년 Svelte 저장소의 리팩터링 PR이 JSDoc 기반 코드로 전환되며 TypeScript 회의론자들의 주목을 받음
- Svelte 측은 이를 반(反) TypeScript 입장이 아니라, TypeScript에 대한 지속적 의존의 일환으로 설명
- 글은 JSDoc과 TypeScript를 대립 구도로 보지 않고, JSDoc 자체가 TypeScript의 일부임을 강조
- TypeScript는 IntelliSense 엔진으로서, JSDoc 주석 해석과 코드 자동완성 기능을 모두 담당
- JSDoc은 빌드 단계 없이 동일한 정적 분석 능력을 제공하며, 현대 JS 프로젝트에서 실질적으로 TypeScript와 동일한 역할 수행
Svelte PR과 논란의 배경
- 2023년 5월, Svelte 저장소의 내부 리팩터링 PR이 Hacker News 첫 페이지에 오름
- 이 PR은 .ts 파일의 타입 선언을 .js 파일의 JSDoc 주석으로 옮기는 변경이었음
- 일부에서는 이를 TypeScript의 이점을 거부하는 행위로 해석
- Svelte 창시자 Rich Harris는 HN에서 직접 “이는 TypeScript 반대가 아니다”라고 설명
- Svelte의 TypeScript에 대한 헌신은 여전히 강력하다고 언급
- 이 사건 이후 “TypeScript vs JSDoc” 비교 글이 다수 등장하며, JSDoc을 “빌드 단계 없는 TypeScript”로 평가하는 흐름이 확산
TypeScript의 기원과 본질
- 2000년대 후반~2010년대 초, JavaScript는 자동완성·타입 안전성이 부족한 언어로 인식됨
- Microsoft 개발자들은 ScriptSharp을 사용해 C# 코드를 JS로 변환하는 방식으로 대응
- 이러한 배경에서 TypeScript가 탄생, 본질적으로는 JS 개발을 개선하기 위한 빌드 도구로 출발
TypeScript는 IntelliSense
- TypeScript는 단순한 언어가 아니라 IntelliSense 엔진 역할 수행
-
.ts 파일을 사용하지 않아도, 코드 자동완성·매개변수 정보·심볼 탐색 등 기능은 TypeScript 언어 서비스가 제공
- 대부분의 에디터에서 JS 코드 작성 시에도 TypeScript 서비스가 백엔드로 동작
TypeScript는 JSDoc
- TypeScript 언어 서비스는 JSDoc 주석 해석에도 사용됨
- TypeScript의 CHANGELOG에는 JSDoc 관련 기능 추가 내역이 자주 포함
- JSDoc 기반 프로젝트도 tsconfig.json으로 설정 가능하며, tsc 명령으로 타입 검사 수행 가능
- 따라서 JSDoc을 사용하는 개발자도 이미 TypeScript를 사용 중인 셈
JSDoc 기반 프로젝트 경험
- 작성자는 기존 프로젝트 프런트엔드를 JSDoc 타입 주석 기반으로 재작성한 경험을 공유
-
열거형(enum) 같은 런타임 기능을 제외하면, 대부분의 TypeScript 표현이 JSDoc으로 가능
-
제네릭은 문법이 다소 복잡하지만, 타입 추론을 더 적극적으로 활용하게 함
- JSDoc 프로젝트에서는 함수 클릭 시 실제 코드로 이동할 수 있어 개발 경험이 향상
-
TypeScript 도구 생태계는 JSDoc 프로젝트에서도 재사용 가능
- 예: OpenAPI나 GraphQL 스키마에서 타입을 생성하는 라이브러리들이 JSDoc 주석 형태로 타입 생성 가능
결론 및 추가 사례
- JSDoc은 TypeScript의 대안이 아니라 동일한 정적 분석 체계를 공유
- 빌드 단계를 생략하면서도 동등한 타입 안정성을 제공
- 추가로, webpack 프로젝트도 JSDoc으로 마이그레이션한 사례가 언급됨
- TypeScript 전문가로서, 작성자는 “JSDoc은 TypeScript다”라는 입장을 명확히 제시