Стала доступна финальная версия TypeScipt 2.0. С ее появлением язык стал еще ближе к спецификации ECMAScript. Давайте посмотрим что появилось нового по сравнению с версией 1.8. |
Что нового?
Упрощенная загрузка файлов определений
Теперь можно загружать файлы определений (.d.ts) сразу с библиотеками с помощью npm. Для этого необходимо выполнить следующую команду:
npm install -s @types/<имя библиотеки>
В результате будет установлена как указанная библиотека так и файлов определений для нее.
Ненулевые типы (Non-nullable Types)
В TypeScript 2.0 введены отдельные типы для null и undefined. Остальные типы по умолчанию считаются ненулевыми. Для использования null или undefined необходимо явно указать "<тип> | null" или "<тип> | undefined". Например: number | null.
Поскольку это критические изменение, то для её активации существует флаг --strictNullChecks.
Контроль типов
Контроль типов был доработан для поддержки ненулевых типов.
Модификатор readonly
Теперь свойства можно отмечать как readonly (только для чтения):
class Person {
readonly name: string;
constructor(name: string) {
if (name.length < 1)
throw new Error("Empty name!");
this.name = name;
}
}
// Следующая строчка выдаст ошибку
new Person("Daniel").name = "Dan";
Упрощенное определение модулей
Иногда необходимо просто объявить модуль, без уточнения его типов. Для этого обычно используется код вида:
declare module "foo" { var x: any; export = x; }
TypeScript 2.0 позволяет сократить этот код до
declare module "foo";
Кроме того, можно использовать шаблоны. Например после следующей строки TypeScript будет считать существующими все модули, начинающиеся с "foo/"
declare module "foo/*";
Отмеченные союзы (Tagged Unions)
В TypeScript 2.0 улучшена возможность работы с отмеченными союзами (Tagged Unions). Таким именем называются типы, у которых существует свойство с одинаковым именем, но гарантированно уникальным значением для каждого типа. Если раньше для работы с ними приходилось использовать приведение типов, то теперь в нем нет необходимости. Например:
interface Circle {
kind: "circle";
radius: number;
}
interface Square {
kind: "square";
sideLength: number;
}
// Объявляем Tagged Union.
type Shape = Circle | Square;
// Пример использования
function getArea(shape: Shape) {
switch (shape.kind) {
case "circle":
// 'shape' тут имеет тип 'Circle' без приведения
return Math.PI * shape.radius ** 2;
case "square":
// 'shape' тут имеет тип 'Square' без приведения
return shape.sideLength ** 2;
}
}
Как скачать?
Установить TypeScript 2.0 можно
npm install -g typescript@2.0