TypeScript 7 전환 기준 TS6 차이와 deprecated tsconfig 정리

··설명 약 13분·작성: 해비·블로그 소개

TypeScript 6에서 7로 전환하기 전에 어떤 설정과 도구를 점검해야 하나요?

TypeScript 7로 옮기기 전에는 기존 타입 오류와 설정부터 정리하고, 제거된 tsconfig 옵션과 컴파일러에 의존하는 도구를 확인합니다. 작은 프로젝트에서 target 설정 오류와 수정 결과를 비교한 뒤 실제 프로젝트의 타입 검사·빌드를 진행합니다.

본문 근거: TypeScript 7.0 정식 발표 · www.typescriptlang.org/tsconfig/

직접 확인: 오류에서 수정까지

TypeScript 7 전환 기준 TS6 차이와 deprecated tsconfig 정리 · 검증 결과 보기

검증 결과 보기: 고정된 오류 예제와 수정 예제의 실제 tsc 진단을 비교하세요. 브라우저 실시간 컴파일러는 아닙니다.

예제 크게 보기 (새 탭)

새 폴더에 src를 만들고 src/index.ts에 export const ready: boolean = true;를 저장합니다. TypeScript 7을 설치한 뒤 이 폴더의 tsconfig.json을 아래 오류/수정 예제로 차례로 검사하세요.

독자 질문: TypeScript 7 업그레이드 후 어떤 설정 오류부터 확인할까요?

얻을 결과: 현재 버전·tsconfig 경로를 확인하고 삭제된 설정을 제거한 뒤 전체 타입 검사를 재실행합니다.

다음 코드를 별도 tsconfig.json에 복사합니다.

{
  "compilerOptions": {
    "strict": true,
    "noEmit": true,
    "target": "es5"
  },
  "include": ["src"]
}

예상 오류 (TS5108): TypeScript 7에서 target es5는 지원되지 않습니다. 실행 환경이 허용하는 target으로 바꾼 뒤 다시 검사합니다.

오류 예제를 다음 코드로 교체합니다.

{
  "compilerOptions": {
    "strict": true,
    "noEmit": true,
    "target": "es2022"
  },
  "include": ["src"]
}
npx tsc -p . --noEmit

기존 최소 예제 확인 기록: TypeScript 7.0.2에서 삭제된 target es5 설정은 TS5108, es2022로 바꾼 최소 프로젝트는 exit 0. 원래 TaskFlow의 설정·의존성·빌드는 미확인.

다음 학습: 과정의 01~21회차 중 적용한 설정·타입 오류를 다시 점검하고 실제 프로젝트 빌드를 실행합니다.

TypeScript 7의 핵심 변화

공식 확인: TypeScript 7.0 정식 발표를 2026-09-28에 확인했습니다. 네이티브 tsc와 기존 compiler API 호환 도구는 별도로 점검합니다.

TypeScript 7은 Go 기반 네이티브 compiler와 language service를 사용합니다.

공식 발표 기준으로 full build에서 일반적으로 큰 성능 향상을 목표로 하며, 기존 TypeScript 6과 타입 검사 결과를 가능한 한 일치시키도록 포팅되었습니다.

일반 사용자 입장에서는 여전히 다음 package와 command를 사용합니다.

npm install -D typescript
npx tsc --version
npx tsc --noEmit

TypeScript 6과의 관계

TypeScript 7은 TypeScript 6의 type-checking과 command-line 동작을 기준으로 호환성을 맞추는 방향입니다.

따라서 5.x 프로젝트에서 바로 7로 올라가는 것보다 TypeScript 6에서 deprecation을 먼저 해결하는 흐름이 더 안전할 수 있습니다.

특히 TypeScript 6에서 deprecated된 옵션은 TypeScript 7에서 hard error가 될 수 있습니다.

주요 기본값 변화

TypeScript 7에서 알아둘 기본 방향은 다음과 같습니다.

strict
→ true 기본


module
→ esnext 기본


target
→ esnext 직전의 최신 안정 ECMAScript


noUncheckedSideEffectImports
→ true 기본


types
→ [] 기본


rootDir
→ ./ 기본

기존 프로젝트가 특정 global @types package를 자동으로 기대했다면 types 변화가 영향을 줄 수 있습니다.

예:

{
  "compilerOptions": {
    "types": [
      "node",
      "vitest/globals"
    ]
  }
}

실제로 필요한 global type만 명시합니다.

rootDir 확인

TypeScript 7에서는 rootDir 기본값 변화 때문에 기존 output 구조가 달라질 수 있습니다.

src 아래를 명확한 source root로 사용한다면:

{
  "compilerOptions": {
    "rootDir": "./src"
  },
  "include": [
    "./src"
  ]
}

처럼 명시할 수 있습니다.

Vite 프로젝트에서 emit을 TypeScript가 직접 담당하지 않는다면 실제 build pipeline과 함께 확인합니다.

target: es5 제거

TypeScript 7에서는 ES5 target이 더 이상 지원되지 않습니다.

오래된 프로젝트에서 다음 설정을 사용하면 migration이 필요합니다.

{
  "compilerOptions": {
    "target": "es5"
  }
}

현대적인 frontend build에서는 Vite/Babel/browser target 전략과 함께 최신 ECMAScript target을 사용합니다.

moduleResolution node / node10 제거

오래된 설정:

{
  "compilerOptions": {
    "moduleResolution": "node"
  }
}

또는 node10은 TypeScript 7에서 지원되지 않습니다.

bundler 환경:

{
  "compilerOptions": {
    "moduleResolution": "bundler"
  }
}

Node.js ESM 프로젝트:

{
  "compilerOptions": {
    "moduleResolution": "nodenext"
  }
}

실행 환경에 따라 선택합니다.

classic 제거

{
  "compilerOptions": {
    "moduleResolution": "classic"
  }
}

이전 방식은 제거되었습니다.

새 프로젝트 예제에 사용하지 않습니다.

baseUrl 제거

TypeScript 7에서는 baseUrl 설정이 더 이상 지원되지 않습니다.

이전:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": [
        "src/*"
      ]
    }
  }
}

현재는 paths target을 프로젝트 root 기준 상대 경로로 정리하는 방향을 사용합니다.

{
  "compilerOptions": {
    "paths": {
      "@/*": [
        "./src/*"
      ]
    }
  }
}

실제 bundler의 alias 설정도 함께 맞춰야 합니다.

module 옵션 제거 항목

다음 legacy module 방식은 TypeScript 7에서 지원되지 않습니다.

amd
umd
systemjs
none

bundler를 사용하는 frontend에서는 esnext 또는 preserve 계열이 더 자연스럽습니다.

esModuleInterop 관련 변화

TypeScript 7에서는 esModuleInterop과 allowSyntheticDefaultImports를 false로 설정할 수 없습니다.

오래된 프로젝트에서 명시적으로 false를 사용했다면 설정을 제거하거나 migration합니다.

alwaysStrict

strict mode는 기본적으로 가정되므로 alwaysStrict를 false로 끄는 방식은 지원되지 않습니다.

command line file path 주의

현재 directory에 tsconfig.json이 있을 때 command line에서 파일 path를 직접 넘기는 기존 습관은 TypeScript 7에서 제한됩니다.

프로젝트 단위로 실행합니다.

npx tsc --noEmit

특정 config:

npx tsc \
  -p tsconfig.app.json

compiler API 호환성

TypeScript 7 초기 버전은 기존 TypeScript JavaScript compiler API와 완전히 동일한 programmatic API를 제공하지 않는 부분이 있습니다.

일부 tool이 기존 typescript package의 compiler API에 직접 의존하면 TypeScript 6 compatibility package가 필요할 수 있습니다.

공식 migration 방식 중 하나:

npm install -D \
  typescript@npm:@typescript/typescript6

이 경우 TypeScript 6 compatibility compiler를 사용하게 됩니다.

TypeScript 7의 tsc도 함께 필요하면 package alias를 별도로 둘 수 있습니다.

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

일반 Vite 애플리케이션에서는 먼저 현재 도구들이 TypeScript 7을 지원하는지 확인하고, 실제 compiler API 문제가 있을 때만 compatibility 구성을 사용합니다.

업그레이드 순서

1. 현재 TypeScript 버전 확인
2. TypeScript 6 deprecation warning 확인
3. deprecated tsconfig option 제거
4. moduleResolution 정리
5. baseUrl 제거
6. rootDir / types 기본값 영향 확인
7. npx tsc --noEmit
8. npm run build
9. test 실행
10. editor TypeScript version 확인

오래된 tsconfig를 그대로 유지하지 않기

다음처럼 역사적으로 쌓인 옵션이 많다면 각 옵션이 현재 필요한지 확인합니다.

{
  "compilerOptions": {
    "target": "es5",
    "moduleResolution": "node",
    "baseUrl": ".",
    "downlevelIteration": true,
    "alwaysStrict": false
  }
}

TypeScript 7에서는 제거되었거나 지원 방향이 바뀐 항목이 포함되어 있습니다.

설정을 단순화합니다.

설정 오류가 사라졌다는 사실만으로 업그레이드를 끝내지 않습니다. 같은 소스의 타입 검사, JavaScript 출력·번들 경로, compiler API를 사용하는 도구를 따로 확인해야 기존 동작이 유지되는지 판단할 수 있습니다.

원리 확인: TypeScript 7.0 공식 전환 안내 (2026-10-12). 아래 기대 결과와 기존 실행 기록은 구분해서 읽습니다.

학습 완료 체크리스트

자기 프로젝트에서 없어도 되는 설정 하나와 명시해야 할 설정 하나를 고르고 이유를 설명해 보세요. 예를 들어 삭제된 baseUrl과 출력 경로를 유지하는 rootDir은 서로 다른 판단입니다.


작은 변형으로 확인하기

target만 수정한 뒤에도 실패하면 진단을 하나씩 읽으세요. include의 src에 .ts 파일이 없을 때 나오는 입력 파일 없음 오류는 target 제거 오류와 다른 문제입니다.

선택 실습: 할 일 앱에 적용하기

TaskFlow는 작업을 추가·완료·삭제하는 할 일 앱입니다. 이 선택 실습에서는 JavaScript 코드를 TypeScript로 확장합니다.

tsconfig와 dependency를 TypeScript 7 기준으로 최종 점검합니다.

선택: 연재 프로젝트와 전체 자료

연재 프로젝트를 이어 만드는 분을 위한 자료입니다. 이 글의 개념과 예제만 찾으셨다면 필요한 파일과 실행 방법만 펼쳐보세요.

TaskFlow 프로젝트 최종 점검

TypeScript 7 전환 기준 TS6 차이와 deprecated tsconfig 정리 · 단계별 TaskFlow

타입을 적용한 TaskFlow에서 작업을 추가·완료 전환·삭제하세요. 타입만 바뀐 단계는 이전과 화면이 같습니다.

예제 크게 보기 (새 탭)

시작·완료 파일과 적용 순서에서 이번 변경 파일의 전체 내용과 적용 순서를 확인합니다.

시작본과 이번 변경

TypeScript 공개 타입 설계 export type과 라이브러리 경계의 완료 체크포인트를 기준으로 이어갑니다. 변경하지 않는 파일은 그 시작 상태를 유지합니다.

기존 package.json·lock과 tsconfig를 먼저 확인하고 제거된 옵션만 실제 실행 환경에 맞게 바꿉니다. compiler API 의존 도구가 있으면 공식 호환 패키지 설명을 확인하고 타입 검사→빌드→기존 테스트 순서로 회귀를 점검합니다.

이전 체크포인트

typescript-step-21-public-types

현재 상태

TaskFlow는 다음 구조를 갖췄습니다.

TypeScript 7
strict
Task 도메인 타입
narrowing
keyof / typeof
as const
satisfies
generics
generic constraints
Utility Types
Mapped Type
Conditional Type
판별 유니온
runtime type guard
React props/event/ref/children
public type boundary

이번 목표

tsconfig와 dependency를 TypeScript 7 기준으로 최종 점검합니다.

전체 파일·코드 보기

package.json

{
  "devDependencies": {
    "typescript": "^7.0.2"
  }
}

실제 최신 patch가 설치되어 있다면 해당 버전을 유지합니다.

tsconfig 점검 예시

Vite frontend 기준으로 다음 항목을 확인합니다.

{
  "compilerOptions": {
    "strict": true,
    "module": "ESNext",
    "moduleResolution": "Bundler",
    "target": "ES2025",
    "noEmit": true,
    "paths": {
      "@/*": [
        "./src/*"
      ]
    }
  }
}

Vite template이 제공하는 실제 config를 우선하며 예제 옵션을 무조건 덮어쓰지 않습니다.

제거 대상 확인

다음 설정이 있다면 migration 여부를 확인합니다.

target: es5
moduleResolution: node / node10 / classic
baseUrl
downlevelIteration
module: amd / umd / systemjs / none
alwaysStrict: false
esModuleInterop: false
allowSyntheticDefaultImports: false

최종 검증

npx tsc --noEmit
npm run build

프로젝트에 test가 있다면 함께 실행합니다.

npm test

또는 실제 test script를 사용합니다.

전체 과정 최종 Before / After

Before
JavaScript TaskFlow
런타임 중심 데이터 구조
외부 입력 신뢰
React props 계약 불명확


After
TypeScript TaskFlow
strict
도메인 타입
안전한 narrowing
재사용 가능한 타입 변환
외부 runtime 검증
React 타입 경계
공개 API 타입 설계
TS7 최신 config

중간부터 시작하는 전체 파일과 적용 순서

이번 글 시작 ZIP · 이번 글 완료 ZIP

시작 ZIP은 직전 프로젝트 단계 typescript-step-21-public-types의 실제 완료 파일입니다. 프로젝트 순서를 이어가는 기준이며 사이트의 기술 읽기 순서와는 구분합니다.

  1. 시작 ZIP을 새 폴더에 풉니다. 이 폴더가 작업 루트이며 기존 체크포인트 파일을 별도로 찾을 필요가 없습니다.
  2. TS7 최종 설정과 점검 문서를 적용하고 누적 타입 계약·런타임 검사·전체 빌드를 실행합니다.
  3. 아래 변경 파일을 같은 상대 경로에 추가하거나 전체 교체합니다. 표시하지 않은 파일과 images는 시작본 그대로 유지합니다. package-lock.json은 완료 ZIP에 있는 파일을 함께 적용합니다.
  4. 작업 루트에서 명령을 실행하고 예상 결과를 확인합니다. 완료 ZIP은 직접 적용한 결과를 비교하는 기준입니다.

추가·교체 파일

  • CHANGES.md — 전체 교체
  • README.md — 전체 교체
  • tsconfig.json — 전체 교체
  • docs/ts7-review.md — 추가

실행과 확인

npm ci
npm run dev
npm run typecheck
npm test
npm run build

개발 서버는 실행 상태로 두고 다른 터미널에서 검사 명령을 실행하세요. Node.js 24.18.0에서 검증했습니다. JavaScript는 http://127.0.0.1:4173, TypeScript는 Vite 실행 출력의 주소로 접속합니다.

예상 결과: strict 검사, 타입 오류 기대 검증, CRUD·guard·React 렌더·mapper 검증 및 Vite 빌드가 모두 통과해야 합니다.

기존 ZIP 검증 기록: TypeScript strict 검사·긍정/부정 타입 계약·런타임 검사·Vite 빌드 통과; React 폼·버튼·초점 DOM 검사 통과. 시작 ZIP에 이 글의 변경 파일만 적용한 결과와 완료 ZIP의 모든 파일 내용이 일치했습니다. 브라우저 화면 배치·실제 기기·외부 CDN 가용성은 이 검사에 포함하지 않았습니다.

이 절의 전체 파일은 ZIP과 일치합니다. 위쪽 원문의 짧은 예제나 생략 표시가 있는 부분 코드는 개념·변경 위치 설명용입니다. 서버 저장과 인증은 제공하지 않으며 JSON fixture는 로컬 읽기 실습용입니다.

복사할 변경 파일 전체 코드

tsconfig.json — 전체 파일

{
  "compilerOptions": {
    "strict": true,
    "target": "ES2025",
    "module": "ESNext",
    "moduleResolution": "Bundler",
    "lib": [
      "ES2025",
      "DOM"
    ],
    "jsx": "react-jsx",
    "noEmit": true,
    "verbatimModuleSyntax": true,
    "skipLibCheck": true,
    "types": []
  },
  "include": [
    "src",
    "tests/contracts.ts"
  ]
}

docs/ts7-review.md — 전체 파일

# 최종 검사

npm run typecheck
npm test
npm run build

TypeScript 7.0.2, strict, ESNext/Bundler, ES2025, react-jsx. 기존 JavaScript 원본과 typed core 및 React 경계를 모두 보존합니다. 실제 운영 API와 인증은 이 로컬 실습 범위가 아닙니다.

완료 체크포인트

typescript-step-22-ts7-review

이 체크포인트가 TypeScript 과정의 최종 상태입니다.

다음 학습

TypeScript 이후에는 React 과정으로 이동해 컴포넌트·state·effect·Router를 본격적으로 학습할 수 있습니다.

TypeScript에서 만든 Task 타입과 함수 계약은 React TaskFlow에서 그대로 재사용합니다.

공식 문서

글 소개·학습 준비·전체 목차
TypeScript 7 전환 기준 TS6 차이와 deprecated tsconfig 정리

TypeScript · 22 / 22 · 선택 최신화 · TypeScript 7 전환 점검

TypeScript 7 전환은 어떤 순서로 판단할까요? 먼저 기존 TypeScript 6에서 타입 오류와 deprecated 설정을 정리하고, TypeScript 7에서 제거된 옵션과 compiler API 의존 도구를 확인합니다. 이 글을 읽으면 설정 진단을 실행 환경 문제와 구분하고 전환 여부를 결정할 수 있습니다.

타입 시스템을 새로 설계한 버전이라기보다 TypeScript 6의 type-checking 동작과 command-line 동작을 최대한 호환하면서 compiler와 language service 성능을 크게 개선하는 방향입니다.

이 글은 선택 최신화 글입니다. 1~21회차의 TypeScript 핵심 학습은 이 글 없이도 완결됩니다.

이번 글에서 배우는 내용

  • TypeScript 7 네이티브 컴파일러
  • TypeScript 6과의 호환 방향
  • strict 기본값
  • module / target 기본값
  • types와 rootDir 기본값 변화
  • TypeScript 6 deprecated option의 제거
  • baseUrl 제거
  • moduleResolution node10/classic 제거
  • compiler API 의존 도구의 compatibility package
  • TS7 업그레이드 점검 순서

단독 학습 선수 지식

package.json·tsconfig와 기존 타입 검사/빌드 스크립트을 알면 됩니다. 이전 TaskFlow 파일 없이 직접 확인 예제로 학습할 수 있습니다.

목차

이 글이 도움이 되었나요?

조회 중

읽음 기록

읽음 — / 전체 22개 · 필수 21개

이 글을 쓴 해비

웹사이트를 제작·운영하고, 개인 서비스와 자동화·AI 도구를 만듭니다. 직접 만들며 배운 내용과 문제 해결 과정을 BlogFlow에 기록합니다.

새 글 받아보기

RSS 리더에서 BlogFlow의 새 글을 확인할 수 있습니다.

RSS 피드 구독하기

댓글 남기기