Основная фишка TypeScript - необязательная типизация данных. Поддерживаются следующие типы: boolean, number, string, array, tuple, enum, any и void. Указание типа переменной производится после знака двоеточия, стоящего за названием переменной:
let myName: string = 'Павел';
let myAge: number = 29;
let married: boolean = false;
Boolean
Пожалуй, самый простой тип данных - логический. Применяется для переменных, которые могут принимать только true
или false
.
let isDone: boolean = false;
Number
Числовой тип. В переменных number
хранятся числа с плавающей точкой. TypeScript поддерживается десятичная, шестнадцатеричная, двоичная и восьмеричная форма записи чисел:
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
String
Строковые (текстовые) данные хранятся в переменных с типом string
. Как и в Javascript, значение переменной заключается в одинарные (''
) или двойные (""
) кавычки. Для себя я принял, что в js файлах использую одинарные, а в html - двойные.
let color: string = "голубой";
color = 'или розовый';
Можно использовать еще одну прикольную штуку - шаблонные строки. Они могут быть многострочными и могут содержать выражения. Такие строки заключаются в обратные кавычки (``
), а для вставки выражений используется синтаксис ${ expr }
.
let myName: string = `Евлампий`;
let age: number = 9;
let sentence: string = `Миня завут ${ myName }.
Минe скора будит ${ age + 1 } лет!`
Array
Массивы. Есть два способа задания этого типа. Первый - указать тип данных и следом квадратные скобки:
let list: number[] = [1, 2, 3];
Второй - с использованием дженериков:
let list: Array<number> = [1, 2, 3];
Тип всех элементов массива должен быть одинаковый.
Tuple
Вроде как "кортеж" по-нашему. Позволяет описать массив с фиксированным известным числом элементов определенного типа. Например, можно использовать для задания пар значений, состоящих из строки и числа:
//Определяем tuple x
let x: [string, number];
// Присваиваем значения
x = ['hello', 10]; // OK
// Присваиваем кривые значения
x = [10, 'hello']; // Ошибка
//Добавляемые элементы должны быть типа string или number
x [2] = 'world'; // OK
x [3] = true; // Ошибка
Enum
Полезное дополнение к набору типов - перечисления.
enum Color {Red, Green, Blue};
let c: Color = Color.Green;
console.log(c); // 1
let colorName: string = Color[c];
console.log(colorName); // Green
Значения можно задавать вручную:
enum Color {Red = 1, Green = 2, Blue = 4};
Any
Любой тип данных. Применяется, когда тип переменной нам не известен, либо он может изменяться в процессе выполнения. Также может быть использован для переменных сторонних библиотек, поведение которых не ясно.
let notSure: any = 4;
notSure = 'может это строка?';
notSure = false; // пнятненько, boolean
Также применяется для массивов, в которых содержатся элементы разных типов:
let list: any[] = [1, true, 'free'];
list[1] = 100;
Void
Отсутствие типа - почти противоположность any
. Можно часто встретить как тип данных, возвращаемых функцией, когда функция ничего не возвращает:
function warnUser(): void {
alert('Мое страшное сообщение!');
}
Для переменных, обозначенных как void
, допустимы только значения undefined
и null
. Не очень полезно.
Явное указание типа
Когда мы знаем о переменной больше, чем TypeScript, можно указать ее тип явно.
Есть два способа сделать. Первый - синтаксис угловых скобок:
let someValue: any = 'это строка';
let strLength: number = (<string>someValue).length;
Второй - as-синтаксис:
let someValue: any = 'это строка';
let strLength: number = (someValue as string).length;