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