TypeScript 5.7 릴리즈

2024년 11월 23일 TypeScript 5.7 버전이 출시되었습니다. 주요 변경사항을 정리해보았습니다.


이제 초기화되지 않은 변수를 감지할 수 있음

TypeScript 5.7 이전에는 특정 상황에서 변수가 초기화되지 않아도 오류 없이 넘어갔었던 상황이 5.7 부터는 오류로 처리됩니다.

function foo() {
  let result: number;

  // 'result' 변수에 할당을 까먹음

  function printResult() {
    console.log(result);
    // As-is: number 타입으로 취급 (개발자가 변수를 잘 할당했다고 가정함)
    // To-be: 에러 발생 - Variable 'result' is used before being assigned.
  }
}

--target es2024, --lib es2024 지원

TS 5.7부터 Object.groupBy, Map.groupBy, Promise.withResolvers 등 새 기능을 포함한 es2024를 지원합니다.


tsconfig.json 를 찾는 과정이 더 스마트해짐

TypeScript는 내가 어떤 파일을 열면 그 파일에 적용할 메인 tsconfig.json(default project)을 찾습니다. tsconfig.json 파일 자체가 없으면 상위 폴더를 계속해서 탐색하고, tsconfig.json 파일을 찾았는데 내가 연 파일이 exclude(제외) 되어 있으면 포기하고 TS 자체의 기본 설정(inferred projects)을 적용합니다.


문제는 tsconfig.json 파일과 테스트용 tsconfig.test.json 파일이 같이 있을 때, 테스트 파일에 tsconfig.test.json 설정이 적용되지 않고 기본 설정(inferred projects)이 적용되는 문제가 있었습니다. TypeScript 5.7 부터는 이러한 상황에서 기본 설정(inferred projects)을 적용하지 않고 다시 메인으로 적용할 tsconfig.json(default project)를 찾아서 적용하도록 메커니즘이 개선되었다고 합니다.


쉽게 말해, tsconfig.json 탐색 알고리즘이 설정 파일을 좀 더 똑똑한 방법으로 찾아서 적용하게 되었다고 이해하고 넘어가셔도 좋습니다.


--module nodenext 옵션 사용 시, JSON import 규칙 추가

tsconfig.jsoncompilerOptions.modulenodenext로 하는 경우, 런타임 오류를 막기 위해 아래 코드처럼 with { type: "json" }을 명시해줘야 하는 규칙이 생겼다고 합니다.


import myConfig from "./myConfig.json";
//                   ~~~~~~~~~~~~~~~~~
// ❌ 에러: Importing a JSON file into an ECMAScript module requires a 'type: "json"' import attribute when 'module' is set to 'NodeNext'.

import myConfig from "./myConfig.json" with { type: "json" };
//                                          ^^^^^^^^^^^^^^^^
// ✅ type: "json"을 작성해주면 괜찮음

Node.js에서 V8 컴파일 캐싱 지원

Node.js 22 버전에 컴파일 캐싱 API(`module.enableCompileCache()`)가 새로 추가되었습니다. TypeScript 5.7에서 이 API를 활용하여 일부 자체 테스트에서 tsc -- version 명령어의 실행 속도가 약 2.5배 빨라졌다고 합니다.

Benchmark 1: node ./built/local/_tsc.js --version
  Time (mean ± σ):     122.2 ms ±   1.5 ms    [User: 101.7 ms, System: 13.0 ms]
  Range (min … max):   119.3 ms … 132.3 ms    200 runs

Benchmark 2: node ./built/local/tsc.js --version
  Time (mean ± σ):      48.4 ms ±   1.0 ms    [User: 34.0 ms, System: 11.1 ms]
  Range (min … max):    45.7 ms …  52.8 ms    200 runs

Summary
  node ./built/local/tsc.js --version ran
    2.52 ± 0.06 times faster than node ./built/local/_tsc.js --version


좀 더 자세한 내용은 Microsoft 공식 기술 블로그에서 확인하실 수 있습니다.


https://devblogs.microsoft.com/typescript/announcing-typescript-5-7/

Announcing TypeScript 5.7 - TypeScript

TypeScript

Announcing TypeScript 5.7 - TypeScript

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 11월 23일 오전 11:23

댓글 0