라이브러리, 프레임워크•2026.06.23
typescript 패키지를 설치하면 됩니다.npm install -D typescript@rcnpm install -D typescript@rctsc를 실행할 수 있으며, 이전과 동일한 결과를 훨씬 더 빠르게 확인할 수 있습니다!> npx tsc --versionVersion 7.0.1-rctsc인가?"라는 충돌 없이 TypeScript 6.0과 7.0을 병행해서 실행할 수 있도록 보장하는 것을 우선순위로 두었습니다.@typescript/typescript6를 출시했습니다. 이 패키지는 tsc6라는 이름의 실행 파일을 제공하므로, 필요한 경우 자체 tsc 바이너리를 포함하는 TypeScript 7.0과 이름 충돌 없이 나란히 설치할 수 있습니다. 또한 이 새로운 패키지는 TypeScript 6.0 API를 다시 내보내기(Re-export)하므로, 여러분은 TypeScript 7용으로 tsc를 사용하면서 다른 도구들은 계속해서 6.0에 의존하도록 할 수 있습니다.typescript에서 직접 임포트할 것으로 예상하므로, npm 별칭(Alias)을 통해 이를 해결하는 것을 권장합니다. 다음 명령을 실행하거나npm install -D typescript@npm:@typescript/typescript6package.json을 다음과 같이 수정할 수 있습니다.{ "devDependencies": { "typescript": "npm:@typescript/typescript6@^6.0.0" }}tsc6 실행 파일만 남게 된다는 점에 유의하세요. 7.0의 tsc를 얻으려면 TypeScript 7에 대한 다른 별칭을 추가하면 되며, 그러면 npx tsc가 7.0에서 정상적으로 작동합니다.{ "devDependencies": { "typescript": "npm:@typescript/typescript6@^6.0.0", "typescript-7": "npm:typescript@rc" }}@typescript/native-preview 패키지로 계속 게시되고 있으며, 다음 명령으로 설치할 수 있습니다.npm install -D @typescript/native-previewtsgo입니다. TypeScript 7이 npm에서 latest 태그로 게시되면, 모든 안정 버전, 주요 프리릴리스 및 나이틀리 버전이 npm의 typescript 패키지로 게시될 예정입니다.--checkers 플래그로 설정할 수 있습니다. 일반적인 머신이 더 많은 CPU 코어를 가진 대규모 코드베이스에서는 이 숫자를 늘려 빌드 속도를 더 높일 수 있지만, 일반적으로 메모리 사용량이 증가하는 비용이 발생합니다. 마찬가지로 CPU 코어가 적고 메모리가 적은 머신(예: CI 러너)에서는 불필요하거나 부수적인 오버헤드를 피하기 위해 이 숫자를 줄이는 것이 좋을 수 있습니다.--checkers의 수를 변경하면 순서에 의존적인 결과가 나타날 수 있습니다. 빌드 환경 전반에 걸쳐 고정된 수의 체커를 지정하면 모든 사람이 동일한 결과를 얻는 데 도움이 될 수 있지만, 이는 각 팀의 재량에 달려 있습니다.--builders 플래그로 설정할 수 있으며, 한 번에 실행할 수 있는 병렬 프로젝트 참조 빌더의 수를 제어합니다. 이는 프로젝트가 많은 모노레포(Monorepo)에서 특히 유용할 수 있습니다.--checkers와 마찬가지로 빌더 수를 늘리면 빌드 속도가 빨라질 수 있지만 메모리 사용량이 늘어날 수 있습니다. 또한 --checkers와 곱해지는 효과가 있으므로 머신과 코드베이스에 적합한 균형을 찾는 것이 중요합니다. 예를 들어, --checkers 4 --builders 4로 빌드하면 최대 16개의 타입 체커가 동시에 실행될 수 있으며, 이는 과도할 수 있습니다.--checkers와 달리 빌더 수를 변경해도 결과가 달라지지는 않아야 합니다. 그러나 프로젝트 참조를 빌드하는 것은 근본적으로 프로젝트의 의존성 그래프에 의해 병목 현상이 발생합니다(--isolatedDeclarations와 별도의 구문적 선언 파일 에밋을 활용하는 코드베이스에서의 타입 체크는 제외).--singleThreaded 플래그를 사용할 수 있습니다. 이는 타입 체크 워커 수를 1로 제한할 뿐만 아니라 파싱과 에밋도 단일 스레드에서 수행되도록 보장합니다.--watch 모드--watch 모드입니다. --watch는 이제 효율적이고 안정적인 크로스 플랫폼 파일 감시 기능을 제공하는 Parcel 번들러의 파일 와처(File-watcher)에서 파생된 새로운 토대 위에 구축되었습니다.node_modules에 많은 종속성이 있는 대규모 프로젝트에서는 계산 비용이 너무 많이 들었습니다. 동적 스케줄링 전략을 사용하더라도 순수 폴링 솔루션은 일반적인 용도로 사용하기에는 너무 부담스럽다는 것을 발견했습니다.@parcel/watcher에 의존해 왔으며, 최근 몇 년 동안 VS Code의 TypeScript는 간접적으로 이 파일 감시 기능에 의존해 왔습니다. 유망해 보였지만, Parcel 와처의 문제 중 하나는 C++로 작성되어 빌드 시 전체 C++ 툴체인이 필요하다는 점이었습니다. VS Code에서 Parcel 와처를 사용한 긍정적인 경험을 바탕으로, 우리는 새로운 툴체인 의존성을 도입하지 않기 위해 몇 가지 최소한의 어셈블리 심(Shim)을 사용하여 이를 Go로 포팅하는 방법을 탐구했습니다.--watch 모드에서 상당한 리소스 개선을 확인하고 있으며, TypeScript 7의 초기 사용자들로부터 긍정적인 피드백을 듣고 있습니다.stableTypeOrdering 플래그가 켜져 있고 ignoreDeprecations 플래그가 설정되지 않은 경우)는 TypeScript 7.0에서도 동일하게 컴파일되어야 합니다.strict가 기본적으로 true입니다.module이 기본적으로 esnext로 설정됩니다.target이 esnext 바로 이전의 현재 안정적인 ECMAScript 버전으로 기본 설정됩니다.noUncheckedSideEffectImports가 기본적으로 true입니다.libReplacement가 기본적으로 false입니다.stableTypeOrdering이 기본적으로 true이며 끌 수 없습니다.rootDir이 이제 ./로 기본 설정되며, 내부 소스 디렉토리는 명시적으로 설정해야 합니다.types가 이제 []로 기본 설정되며, 이전 동작은 ["*"]로 설정하여 복구할 수 있습니다.rootDir과 types 변경 사항이 가장 "놀라운" 변화일 수 있다고 생각하지만, 쉽게 해결할 수 있습니다. tsconfig.json이 src와 같은 디렉토리 외부에 있는 프로젝트는 동일한 디렉토리 구조를 유지하기 위해 rootDir을 포함하기만 하면 됩니다. { "compilerOptions": { // ...+ "rootDir": "./src" }, "include": ["./src"] }types 변경 사항의 경우, 특정 전역 선언에 의존하는 프로젝트는 이를 명시적으로 나열해야 합니다. 예를 들어: { "compilerOptions": { // 필요한 @types 패키지를 명시적으로 나열 (예: bun, mocha, jasmine 등)+ "types": ["node", "jest"] } }target: es5는 더 이상 지원되지 않습니다.downlevelIteration은 더 이상 지원되지 않습니다.moduleResolution: node/node10은 더 이상 지원되지 않으며, 대신 nodenext와 bundler가 권장됩니다.module: amd, umd, systemjs, none은 더 이상 지원되지 않으며, 번들러 또는 브라우저 기반 모듈 해석과 함께 esnext 또는 preserve를 사용할 것이 권장됩니다.baseUrl은 더 이상 지원되지 않으며, paths는 baseUrl 대신 프로젝트 루트를 기준으로 하도록 업데이트할 수 있습니다.moduleResolution: classic은 더 이상 지원되지 않으며, bundler 또는 nodenext가 권장되는 대체제입니다.esModuleInterop 및 allowSyntheticDefaultImports를 false로 설정할 수 없습니다.alwaysStrict는 true로 간주되며 더 이상 false로 설정할 수 없습니다.module 키워드를 사용할 수 없습니다.asserts 키워드를 사용할 수 없으며, 대신 with 키워드를 사용해야 합니다(ECMAScript의 임포트 속성 구문 개발 방향에 맞추기 위함)./// <reference no-default-lib /> 지시문은 skipDefaultLibCheck 하에서 더 이상 존중되지 않습니다.tsconfig.json 파일이 있는 경우, 명시적인 --ignoreConfig 플래그를 전달하지 않는 한 커맨드 라인 빌드에서 파일 경로를 받을 수 없습니다.type HeadTail<S> = S extends `${infer Head}${infer Tail}` ? [Head, Tail] : never;type Result = HeadTail<"😀abc">;// ^// 7.0에서: ["😀", "abc"]// 이전에는: ["\ud83d", "\ude00abc"]"😀"를 서로게이트 쌍(Surrogate pair)의 두 절반(\ud83d 및 \ude00)으로 나누었습니다. 이는 기술적으로 JavaScript의 인덱싱과 일치했지만(예: 추론된 Head 타입이 "😀abc"[0]과 같음), 대개 의도한 바가 아니었으며 의미론적으로 유효하지 않은 짝을 이루지 못한 서로게이트를 포함하는 문자열 리터럴 타입을 생성할 수 있었습니다.Length 유틸리티와 같이 UTF-16 코드 유닛을 의도적으로 모델링한 타입 레벨 문자열 조작에 있어서는 하위 호환성이 깨지는 변경 사항(Breaking change)입니다. 실제로는 새로운 동작이 더 유용하고 덜 놀라울 것으로 기대합니다. 템플릿 리터럴 추론은 이제 "😀"를 하나의 단위로 취급하는 for...of로 문자열을 반복하거나 [...str]로 스프레드하는 것과 동일한 직관을 따릅니다..ts 파일에서의 TypeScript 분석과 여러 면에서 차이가 있었습니다.typeof someValue를 작성하세요.@enum은 더 이상 특별하게 인식되지 않습니다. (typeof YourEnumDeclaration)[keyof typeof YourEnumDeclaration]에 대한 @typedef를 생성하세요.?는 더 이상 타입으로 사용할 수 없습니다. 대신 any를 사용하세요.@class는 함수를 생성자로 만들지 않습니다. 대신 class 선언을 사용하세요.!는 지원되지 않습니다. 그냥 T를 사용하세요./** @typedef {T} */ TypeAliasName;), @typedef 태그 내에 정의되어야 합니다(예: /** @typedef {T} TypeAliasName */).function(string): void)은 더 이상 지원되지 않습니다. 대신 TypeScript 약어(Shorthand)를 사용하세요(예: (s: string) => void).this에 별칭을 지정하거나 함수의 prototype 전체를 재할당하는 것과 같은 일부 JavaScript 패턴은 더 이상 특별하게 처리되지 않습니다.아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!

에이전트 기반 테스트: E2E 테스트 스택에서 에이전트의 역할
Inkyu Oh • SW Engineering

JavaScript를 활용한 의도적인 렌더링 차단
Inkyu Oh • Front-End