Новые фичи включают в себя:
Omit
;С режимом сборки --incremental
последующие сборки выполняются быстрее, благодаря кэшированию ссылок, расположений файлов и других данных, связанных со сборкой.
Вспомогательный тип Omit
позволяет создавать новые типы на основе существующих методом исключения некоторых свойств из исходного типа.
Например, тип Person
определен следующим кодом:
type Person = {
name: string;
age: number;
address: string;
};
Используя Omit
, создаем новый тип без свойства address:
Это то же самое, что:
type NewPerson = {
name: string;
age: number;
}
Улучшенные проверки избыточных свойств в типах c объединением
До TypeScript 3.5 проверки избыточных свойств в некоторых случаях не замечали лишние свойства. В объединениях TypeScript разрешал свойство с тем же именем, что и у типа с объединением, но с типом, отличным от того, что задан в определении. Например:
type Person = {
name: string;
age: number;
};
type Address = {
address: string;
}
const person: Person | Address = {
name: 'Joe',
age: 1,
address: true
};
Мы можем задать address
для чего-то, не являющегося строкой, что, в общем-то, не должно быть разрешено.
Это исправлено в TypeScript 3.5. Сейчас address
должен быть строкой, поскольку он указан как строка.
На файлы глобальных объявлений UMD теперь можно ссылаться, используя параметр --allowUmdGlobalAccess
.
Это добавляет больше гибкости микшированию и сопоставлению библиотек сторонних производителей. Теперь глобальные переменные, объявленные библиотеками, можно использовать даже внутри модулей.
Умная проверка типа с объединениемДо TypeScript 3.5 мы бы получили ошибку в определении и назначении переменной следующего типа объединения:
type Foo = { done: boolean, value: string }
type Bar =
| { done: false, value: string }
| { done: true, value: string };
declare let source: Foo;
declare let target: Bar;
target = source;
До 3.5 done
был бы распознан как обладающий литеральным типом со значением, а не булевым.
Теперь тип done
распознается как логический— может принимать значения только true
или false
.
Мы создаем обобщенные конструкторы с помощью следующей функции:
function composeConstructors<T, U, V>(
F: new (x: T) => U, G: new (y: U) => V): (x: T) => V {
return x => new G(new F(x))
}
TypeScript 3.5 может выводить типы T
, U
и V
из цепочки типов, сформированных в композиции.
Если у нас есть следующий код:
class Foo<T> {
value: T;
constructor(value: T) {
this.value = value;
}
}
class Bar<U> {
value: U;
constructor(value: U) {
this.value = value;
}
}
let f = composeConstructors(Foo, Bar);
let a = f('foo');
Мы видим, что у a
тип Bar<Foo<string>>
. Предыдущие версии показывали для a
тип Bar<{}>
.
TypeScript 3.5 умнее и быстрее. Он может выводить типы, сформированные композицией конструкторов, проходя по цепочке композиции. Проверка избыточных свойств проводится для типов с объединением, чего не было в более ранних версиях.
Кроме того, мы получили флаг --allowUmdGlobalAccess
для запуска доступа глобальных переменных из UMD модулей.
И, наконец, вспомогательный тип Omit
для создания новых типов из существующих с удалением некоторых свойств.
Перевод статьи John Au-Yeung: Great New Features Released in TypeScript 3.5
Комментарии