Notable Behavioral Changes

`lib.d.ts` Changes

DOM用に生成されたコードの変更。 https://github.com/microsoft/TypeScript/pull/57027 参照。

More Accurate Conditional type Constraints

Genericsを使った型の条件分岐の誤りが修正された。

type IsArray<T> = T extends any[] ? true : false;

function foo<U extends object>(x: IsArray<U>) {
  let first: true = x; // Error
  let second: false = x; // 以前のバージョンでエラーが検出されなかった
}

More Aggressive Reduction of Intersections Between type Variables and Primitive Types

交差型がより限定した推論をするようになった。 

declare function intersect<T, U>(x:T, y:U): T & U;

Improved Checking Against Template Stringswith Interpolations

テンプレートのplaceholder slotsの補完チェックが正確になった。

function a<T extends { id: string }>() {
  let x: `-${keyof T & string}`;
  x = "-id"; // Error
}

Error When Type-Only Imports Conflict with Local Values

importした型とローカル変数の名前が競合した時、エラーが検出されるようになった。

import { Something } from "./some/path";

let Something = 123; // Error

New Enum Assignability Restrictions

Enumが同じ識別子を持つ場合の互換性チェックが強化された。

namespace First {
  export enum SomeEnum {
    A = 0,
    B = 1,
  }
}

namespace Second {
  export enum SomeEnum {
    A = 0,
    B = 2, // 値が異なる
  }
}

function foo(x: First.SomeEnum, y: Second.SomeEnum) {
  x = y; // Error
  y = x; // Error
}

Name Restrictions on Enum Members

Enumのキーに Infinity NaN が使用できなくなった。

// ERROR
Enum E {
  Infinity = 0,
  "-Infinity" = 1,
  NaN = 2,
}

Better Mapped Type Preservation Over Tuples with any Rest Elements

引数でany型と推論されていた箇所についてより正確に推論できるようになった。

Promise.all(["", ...([] as any)])
    .then((result) => {
        const head = result[0];       // 5.3: any, 5.4: string
        const tail = result.slice(1); // 5.3 any, 5.4: any[]
    });

Last updated