10P by neo 14일전 | ★ favorite | 댓글 3개
  • 타입스크립트 컴파일러를 Go 기반 네이티브로 포팅하는 프로젝트 Corsa의 ‘tsgo’ 프리뷰가 npm으로 공개됨
  • 3월에 이슈가 되었던 10배 더 빠른 TypeScript 관련 후속 발표
  • 기존 tsc 대비 10배 이상의 속도 향상을 달성했으며, JSX와 JSDoc 기반 JS 파일도 지원
  • VS Code용 Native Preview 확장도 출시되었으나, 자동완성, 참조 찾기 등은 아직 개발 중
  • 새로운 네이티브 API와 LSP 기반 언어 서버도 준비 중이며, Rust 기반 Node 모듈 libsyncrpc 도입
  • 일부 기능은 아직 미구현이며, TypeScript 7(Corsa)와 기존 5.8(Strada) 간 명확한 차이 존재

TypeScript Native Preview 개요

  • 2025년 3월 발표된 타입스크립트 네이티브 포팅 프로젝트(Corsa) 의 프리뷰가 공개됨
  • 기존 JS 기반 코드베이스(Strada) 대비 Go로 작성된 tsgo병렬성과 공유 메모리 활용으로 대규모 프로젝트에서 10배 이상의 성능 향상을 보임
  • tsgo는 향후 tsc로 대체될 예정이지만 현재는 별도 npm 패키지로 제공됨
    npm install -D @typescript/native-preview  
    npx tsgo --project ./src/tsconfig.json  
    

VS Code 확장 기능

  • VS Code용 “TypeScript (Native Preview)” 확장 출시

  • 설치 후 명령어 팔레트 또는 설정을 통해 활성화 필요

    "typescript.experimental.useTsgo": true  
    
  • 현재는 기존 확장에 의존하며 기능은 제한적이나 지속적으로 개선 예정

릴리스 주기 및 개발 로드맵

  • 해당 프리뷰는 향후 TypeScript 7 정식 버전으로 발전 예정
  • 야간 빌드(Nightly) 로 배포되며, 자동 업데이트됨
  • 일부 기능 미지원 상태:
    • --build, --declaration, 하위 타깃 emit
    • 에디터 기능: 자동완성, 참조찾기, 리네임 등

주요 업데이트 사항

타입 검사 완성도 향상

  • 대부분의 타입 검사 기능 포팅 완료
  • JSX와 JavaScript + JSDoc 타입 검사도 지원 시작
  • 일부 intentional 변경사항 및 lib.d.ts 차이로 오류가 다를 수 있음

JSX 타입 검사 지원

  • JSX는 초기엔 파싱만 가능했으나, 이제 완전한 타입 검사 지원
  • 예시: Sentry 프로젝트 기준 tsc는 72초, tsgo는 6.7초로 10배 이상 속도 향상
    tsgo -p . --noEmit --extendedDiagnostics  
    

JavaScript 파일 타입 검사

  • JSDoc 기반으로 JS 파일을 분석하는 기능도 네이티브 코드에서 재구현됨
  • 과거 방식보다 현대적이고 일관된 방식으로 리팩토링됨
  • 일부 구형 패턴은 더 이상 인식되지 않을 수 있음

에디터 기능 (LSP 기반)

  • 기존 TSServer 대신 LSP 기반 언어 서버로 재작성 중
  • 초기 버전에서는 오류 표시, 정의로 이동, hover 기능 제공
  • 최근에는 자동완성(completion) 기능도 추가됨

API 개발 현황

  • IPC 기반 API 레이어 구현 중
  • 다양한 언어에서 TypeScript 프로세스와 통신 가능
  • Node.js에서 동기 통신을 위해 Rust 기반 모듈 libsyncrpc 도입
  • 아직 API 디자인 초기 단계, 피드백 수용 중

기존 TypeScript와의 차이점

  • 일부 설정 차이로 기존 프로젝트에서 오류 발생 가능:

    • 예: --moduleResolution: nodebundler 또는 nodenext 권장
      {  
        "compilerOptions": {  
          "module": "preserve",  
          "moduleResolution": "bundler"  
        }  
      }  
      
  • 기타 차이:

    • JSX emit은 보존만 가능
    • declaration emit 미지원
    • --build 미지원
    • 프로젝트 참조 관련 언어 서비스 미완성

앞으로의 계획

  • 올해 말까지 --build 및 에디터 핵심 기능 대부분 구현 목표
  • 개발 진행 상황은 블로그 및 nightly 릴리스를 통해 지속 업데이트 예정

lsp 직접 빌드해서 사용중입니다. go로 바꾸니 리소스 줄어든게 체감이 확되네요

요즘은 js를 rust / go로 옮기기만 해서 성능 향상시키는게 유행

리팩토링하다 보면 tsserver쪽 코드 파싱이 느려져서 에디터가 통채로 멈추는 경우가 꽤 있었는데 빨리 나와서 이 고통에서 해방되었으면 좋겠네요