JSDoc은 TypeScript다

1 month ago 7

  • 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다”라는 입장을 명확히 제시

Read Entire Article