✨ Поддержка ECMAScript модулей в Node.js
Была проделана оргомная работа. Теперь наконец-то можно юзать es импорты в ноде:
import { helper } from "./foo.js"; // works in ESM & CJS
Там очень много нюансов и деталей
✨ Добавлен новый тип Awaited, который умеет разворачивать промисы (pr)
// B = number
type B = Awaited<Promise<Promise<number>>>;
✨ Template String Types теперь можно использовать в качестве Дискриминанта (PR)
export interface Success {
type:
${string}Success;body: string;
}
export interface Error {
type:
${string}Error;message: string;
}
export function handler(r: Success | Error) {
if (r.type === "HttpSuccess") {
// 'r' has type 'Success'
let token = r.body;
}
}
✨поддержка --module es2022 (pr)
Пока там только top level await, который раньше был в esnext
✨Conditional Types теперь оптимизируется хвостовая рекурсия (pr)
Это значит, что если рекурсия не создает стек вызовов, ограничение глубины в 50 вызовов больше не действует!
type TrimLeft<T extends string> =
T extends
${infer Rest} ? TrimLeft<Rest> : T;// Test = "hello" | "world"
type Test = TrimLeft<" hello" | " world">;
✨ Можно попросить TS выкидывать импорты которые он считает неиспользуемыми (pr)
с флагом —preserveValueImports
✨ Типы для пропоузала Ergonomic brand checks for Private Fields (pr)
Теперь можно писать #brand in obj чтобы убедиться что у объекта есть соответсвующее приватное поле (конечно это можно делать только в объекте того же типа
✨Типы для пропоузала Import Assertions (pr)
Можно писать import obj from "./something.json" assert { type: "json" };
🛠 В JSX появятся умные значения аттрибутов (pr)
TypeScript будет выбирать
width={} или width=“” с помощью `big data deep network machine learning. Ха-ха, шучу, будет посто смотреть на тип атрибута.🛠 Названия непонятных типов будут сохранены
Раньше, если вы написали
let a: Pelmen и не импортировали тип, a превращалась в unknown. Теперь тип будет Pelmen (unresolved)