Andrey on .NET | Вышла финальная версия TypeScript 2.0

Вышла финальная версия TypeScript 2.0

TypeScript logoСтала доступна финальная версия 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

Добавить комментарий