Menu

TypeScript 7: 네이티브 컴파일러, 변경 사항, 업그레이드

TypeScript 7은 TypeScript 컴파일러를 Go로 다시 작성한 네이티브 프로그램입니다. 약 10배 빠르고, tsc 명령과 언어는 그대로입니다. 사용자에게 바뀐 점(새 기본값, 제거된 옵션, 없어진 JavaScript API), 아직 TypeScript 6이 필요한 도구, 업그레이드 방법을 알아봅니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

TypeScript 7은 TypeScript 컴파일러를 Go로 다시 작성해 네이티브 프로그램으로 배포한 버전입니다. 언어는 같고, 명령은 여전히 tsc이며, npm 패키지도 여전히 typescript입니다. 바뀌는 것은 속도(전체 빌드가 약 10배 빠름), 몇 가지 새 기본값, 그리고 TypeScript 6이 폐기한 옵션의 제거입니다. TypeScript 7.0은 2026년 7월 8일에 출시되었고, npm에 있는 버전은 7.0.2입니다.

npm install --save-dev typescript@latest
npx tsc --version
Version 7.0.2

타입 수준에서 볼 수 있는 몇 안 되는 차이 중 하나는 템플릿 리터럴 타입이 문자열을 나누는 방식입니다. JavaScript는 문자열을 UTF-16 코드 단위로 저장하며, 😀 같은 이모지는 코드 단위 두 개를 차지합니다.

TypeScript 6은 템플릿 리터럴 타입을 text[0]처럼 코드 단위로 나눴습니다. TypeScript 7은 [...text]처럼 코드 포인트 단위로 나누므로 이모지가 온전히 유지됩니다.

type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;

type Result = HeadTail<"😀abc">;
// TypeScript 7: ["😀", "abc"]
// TypeScript 6: ["\ud83d", "\ude00abc"]

TypeScript를 Go로 다시 작성한 이유

버전 6까지 TypeScript 컴파일러는 그 자체가 TypeScript로 작성되어 Node.js에서 실행되었습니다. 대규모 코드베이스에서는 느린 빌드, 느린 에디터 시작, 높은 메모리 사용량으로 이어졌습니다.

Anders Hejlsberg는 2025년 3월 11일 "A 10x Faster TypeScript"라는 글에서 네이티브 포팅을 발표했습니다. 새 코드베이스의 코드명은 Corsa, JavaScript 코드베이스는 Strada였습니다. 팀은 타입 검사기를 새로 설계하지 않고 기존 컴파일러의 코드를 옮겼으므로, 새 컴파일러는 같은 규칙을 따르고 같은 오류를 보고합니다. TypeScript 6.0(2026년 3월)은 JavaScript 코드베이스의 마지막 릴리스로서 다리 역할을 했습니다. TypeScript 7이 제거할 모든 것을 폐기 처리한 것입니다. TypeScript 7.0은 2026년 7월 8일에 뒤이어 나왔습니다.

TypeScript 7은 얼마나 빠른가

7.0 릴리스와 함께 공개된 오픈 소스 프로젝트의 전체 빌드 결과입니다.

프로젝트TypeScript 6TypeScript 7속도 향상메모리
VS Code125.7 s10.6 s11.9x5.2 GB에서 4.2 GB로
Sentry139.8 s15.7 s8.9x4.9 GB에서 4.6 GB로
Bluesky24.3 s2.8 s8.7x1.8 GB에서 1.3 GB로
Playwright12.8 s1.47 s8.7x1.0 GB에서 0.9 GB로
tldraw11.2 s1.46 s7.7x0.6 GB에서 0.5 GB로

이 실행은 기본값인 타입 검사 워커 4개를 썼습니다. 같은 컴퓨터에서 --checkers 8로 실행하면 VS Code 빌드는 7.51 s(16.7x), tldraw는 1.06 s(10.6x)가 걸렸고, 대신 메모리를 더 썼습니다.

에디터도 그만큼 빨라집니다. 언어 서비스가 이제 네이티브 언어 서버로 실행됩니다. VS Code 코드베이스에서 에디터를 열고 파일의 첫 오류가 보이기까지의 시간이 약 17.5초에서 1.3초 미만으로 줄었습니다. 속도 향상은 모노레포, CI 파이프라인, 대규모 코드베이스의 에디터에서 가장 크게 느껴집니다.

그대로인 것

  • 명령과 패키지. npm install --save-dev typescript와 npx tsc. 설치할 때 npm이 @typescript/typescript-linux-x64 같은 선택적 의존성에서 플랫폼에 맞는 미리 빌드된 바이너리를 고르므로, 따로 설정할 것이 없습니다.
  • 언어. 같은 문법, 같은 타입 시스템, 같은 오류 코드.
  • 결과. 릴리스 노트에 따르면 stableTypeOrdering 플래그를 켜고 ignoreDeprecations 설정 없이 TypeScript 6.0에서 깨끗하게 컴파일되는 코드는 사실상 전부 TypeScript 7.0에서 똑같이 컴파일될 것입니다.

새 기본값

TypeScript 6.0이 다음 기본값을 바꿨고 TypeScript 7도 그대로 유지합니다. tsconfig.json에서 설정하지 않은 옵션에만 해당합니다.

옵션새 기본값이전 기본값에 기댔다면 생기는 일
stricttruestrict를 설정한 적 없는 프로젝트도 이제 strict null 검사, noImplicitAny 등을 받습니다
targetes2025, esnext 직전의 최신 버전더 오래된 target을 설정하지 않으면 출력에 최신 문법이 남습니다
moduleesnextnodenext나 commonjs를 설정하지 않으면 ES 모듈로 출력합니다
types[]설치된 @types 패키지를 더 이상 자동으로 불러오지 않습니다. "types": ["node"]를 추가하세요(["*"]는 이전 동작을 복원)
rootDir./, tsconfig.json이 있는 폴더outDir을 설정하고 소스가 src에 있으면 "rootDir": "./src"를 설정할 때까지 error TS5011
noUncheckedSideEffectImportstrueimport "./styles.css" 같은 부수 효과 import에는 모듈 선언(declare module "*.css";)이 필요하며, 보통 프레임워크 타입 패키지가 제공합니다
stableTypeOrdering항상 켜짐, 끌 수 없음실행할 때마다 타입이 같은 순서로 정렬되므로 오류 메시지와 .d.ts 출력이 검사 순서에 좌우되지 않습니다

제거된 옵션과 문법

TypeScript 6에서 폐기된 옵션은 TypeScript 7에서 오류입니다.

  • target: es5, 그리고 ES5 출력을 위해서만 존재하던 downlevelIteration.
  • moduleResolution: node(node10이라고도 함)와 classic. nodenext나 bundler를 쓰세요.
  • module: amd, umd, system, none.
  • baseUrl(tsconfig 파일 기준으로 paths를 쓰세요)과 outFile(번들러를 쓰세요).
  • esModuleInterop: false, allowSyntheticDefaultImports: false, alwaysStrict: false. 세 가지 모두 항상 켜져 있습니다.

컴파일러가 무엇을 지워야 하는지 정확히 알려 줍니다.

error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.
error TS5108: Option 'moduleResolution=node10' has been removed. Please remove it from your configuration.

오래된 문법 두 가지도 오류입니다. 네임스페이스를 위한 module Foo { }(namespace Foo { }로 쓰세요. 패키지를 위한 declare module "foo"는 영향이 없습니다)와 import assertion(assert { type: "json" }은 with { type: "json" }이 됩니다)입니다.

index.ts(2,8): error TS1540: A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.

2번째 줄의 module을 namespace로 바꾸면 고쳐지고, 프로그램은 4를 출력합니다.

명령줄에서는 tsconfig.json이 있는 폴더에서 tsc file.ts를 실행하면 설정을 조용히 무시하는 대신 error TS5112로 멈춥니다. tsc만 실행하거나 --ignoreConfig를 넘기세요. JSDoc으로 검사하는 JavaScript 파일에서 TypeScript 7은 타입을 TypeScript에 더 가깝게 읽습니다. @enum은 더 이상 인식하지 않고, 타입으로 쓰는 값에는 typeof가 필요합니다. 제거된 각 옵션의 대체 방법은 tsconfig 페이지에서 보여 줍니다.

아직 TypeScript 6이 필요한 도구

TypeScript 7.0에는 안정적인 JavaScript API가 없습니다. require("typescript")는 버전 정보(version과 versionMajorMinor)만 반환하고, 다른 도구가 호출하는 컴파일러 함수(createProgram, 언어 서비스)는 없습니다. 패키지의 typescript/unstable/* 진입점은 실험적이며 대체재가 아닙니다. 릴리스 노트에 따르면 팀은 TypeScript 7.1에서 새롭고 다른 API를 제공할 예정입니다. 그때까지 컴파일러를 라이브러리로 import하는 도구는 모두 TypeScript 6을 계속 씁니다.

  • typescript-eslint(타입 정보를 쓰는 린트 규칙)
  • Vue, Svelte, Astro 파일용 언어 도구, Angular의 템플릿 타입 검사, MDX
  • TypeScript 7이 설치되어 있으면 시작하자마자 멈추는 ts-node

이런 도구를 위해 TypeScript는 전체 API와 tsc6 명령을 포함한 TypeScript 6을 설치하는 호환 패키지 @typescript/typescript6을 제공합니다. npm 별칭을 쓰면 한 프로젝트에 둘 다 둘 수 있습니다. 빌드는 TypeScript 7이 하고, typescript를 import하는 도구는 버전 6을 받습니다.

{
    "devDependencies": {
        "@typescript/native": "npm:typescript@^7.0.2",
        "typescript": "npm:@typescript/typescript6@^6.0.2"
    }
}

npm install 후:

$ npx tsc --version
Version 7.0.2
$ npx tsc6 --version
Version 6.0.3

이런 도구를 쓰지 않는다면 그냥 typescript를 설치하고 이 부분은 건너뛰세요.

새 명령줄 옵션

네이티브 컴파일러는 파싱, 검사, 출력을 병렬로 합니다. 이를 제어하는 새 플래그가 세 개 있으며, 릴리스 노트는 --checkers와 --builders를 실험적 기능이라고 합니다.

플래그하는 일
--checkers N프로젝트당 타입 검사 워커 수(기본값 4). 코어가 많은 컴퓨터에서는 늘리면 도움이 될 수 있지만 메모리를 더 쓰고, 작은 CI 러너에는 줄이는 편이 맞습니다.
--builders N프로젝트 참조를 --build할 때 동시에 빌드하는 프로젝트 수. --checkers와 곱해집니다. 빌더 4개에 체커 4개면 체커가 한 번에 16개까지 돌 수 있습니다.
--singleThreaded디버깅이나 빠듯한 메모리 제한을 위해 병렬 처리를 모두 끕니다.

--watch도 Parcel 번들러의 파일 감시기를 Go로 포팅한 것 위에 다시 작성되었습니다.

에디터 지원

VS Code용으로 TypeScript 팀은 전용 TypeScript 7 확장 프로그램을 배포합니다. 설치하면 기본값이 되고, 명령 팔레트의 "Disable TypeScript 7 Language Server"로 TypeScript 6으로 돌아갈 수 있습니다. 최신 Visual Studio는 워크스페이스에 따라 TypeScript 7을 자동으로 켜고, 다른 에디터(Neovim, Zed, Sublime Text, Emacs)는 Language Server Protocol로 연결합니다. Vue, Svelte, Astro, MDX 파일이나 Angular 템플릿을 쓰는 프로젝트는 TypeScript 7이 이 도구들이 쓸 수 있는 API를 제공할 때까지 TypeScript 6 기반 에디터 지원을 유지합니다. Angular 프로젝트에서도 프로젝트 전체를 빠르게 검사하는 데는 TypeScript 7의 tsc를 쓸 수 있습니다.

TypeScript 7로 업그레이드하는 방법

  1. 5.x라면 먼저 TypeScript 6으로 업그레이드하세요: npm install --save-dev typescript@6. 보고되는 폐기 오류는 "ignoreDeprecations": "6.0"으로 가리지 말고 모두 고치세요.
  2. TypeScript 6에서 "stableTypeOrdering": true를 켜고 그로 인해 바뀌는 것을 고치세요. 팀이 7에서 똑같이 컴파일된다고 밝힌 설정이 바로 이것입니다.
  3. 이전 값에 기댔다면 기본값이 바뀐 옵션을 설정하세요. 예: "types": ["node"], "rootDir": "./src".
  4. TypeScript 7을 설치하세요: npm install --save-dev typescript@latest. 원하면 이후에 stableTypeOrdering을 지워도 됩니다. 7에서는 항상 켜져 있습니다.
  5. 도구를 확인하세요. typescript-eslint, ts-node, 템플릿 타입 검사가 있는 프레임워크를 쓴다면 위에서 보여 준 TypeScript 6 별칭을 설정하세요.
  6. npx tsc --version으로 버전을 확인하고, CI가 업데이트된 lockfile로 설치하는지 확인하세요.

tsgo와 미리보기 빌드

출시 전에는 네이티브 컴파일러가 @typescript/native-preview로 배포되었고, JavaScript tsc와 나란히 써 볼 수 있도록 명령 이름은 tsgo였습니다. 2025년과 2026년 초의 글에서는 tsgo를 언급합니다. 7.0부터 이 이름은 일상에서 쓰이지 않습니다. 네이티브 컴파일러가 곧 tsc이고, 나이틀리 빌드는 typescript@next(현재 7.1 개발 버전)로 배포됩니다.

자주 묻는 질문

TypeScript 7이란 무엇인가요?

TypeScript 7은 Node.js 위에서 JavaScript로 실행되는 대신 Go로 다시 작성해 네이티브 프로그램으로 컴파일한 TypeScript 컴파일러의 첫 릴리스입니다. 같은 언어를 같은 tsc 명령으로 타입 검사하며, 릴리스 노트에 따르면 전체 빌드가 보통 TypeScript 6보다 8배에서 12배 빠릅니다. 2026년 7월 8일에 출시되었습니다.

TypeScript 7은 Go로 작성되었나요?

네. 컴파일러와 언어 서비스가 TypeScript에서 Go로 포팅되었습니다(프로젝트 코드명은 Corsa, JavaScript 코드베이스는 Strada). 여전히 npm에서 typescript 패키지로 설치하며, npm이 운영체제와 CPU에 맞는 미리 빌드된 네이티브 바이너리를 고릅니다.

TypeScript 7을 쓰려면 코드를 바꿔야 하나요?

코드는 대개 그대로이고, 설정은 바꿔야 할 때가 있습니다. TypeScript 7은 6.0이 폐기한 옵션(target: es5, moduleResolution: node, baseUrl, outFile 등)을 제거하고 strict: true, types: [] 같은 기본값을 바꿉니다. stableTypeOrdering을 켜고 ignoreDeprecations 없이 TypeScript 6.0에서 깨끗하게 컴파일되는 코드는 똑같이 컴파일될 것입니다.

tsgo란 무엇인가요?

tsgo는 7.0 릴리스 전에 npm 패키지 @typescript/native-preview로 배포된 네이티브 컴파일러 미리보기 빌드의 명령 이름이었습니다. TypeScript 7에서 네이티브 컴파일러는 그냥 typescript 패키지의 tsc이고, 나이틀리 빌드는 typescript@next에서 받습니다.

typescript-eslint는 TypeScript 7에서 동작하나요?

직접은 안 됩니다. TypeScript 7.0에는 안정적인 JavaScript API가 없는데, typescript-eslint, ts-node, Vue, Svelte, Angular의 템플릿 검사기 같은 도구가 그 API를 호출합니다. 이런 도구를 위해 @typescript/typescript6 패키지(npm 별칭)로 TypeScript 6을 설치해 두고, 빌드에는 TypeScript 7의 tsc를 쓰세요. TypeScript 팀은 TypeScript 7.1에서 새롭고 다른 API를 제공할 것으로 예상합니다.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기