TypeScript:
- расширяет JavaScript, добавляя типы к языку.
- ускоряет процесс разработки, выявляя ошибки и предоставляя исправления еще до того, как вы запустите свой код.
- open source
Типы предоставляют способ описания формы объекта, предоставляют лучшую документацию и позволяют TypeScript'у проверять правильность работы вашего кода.
TypeScript код транспилируется в JS через компилятор TS или Babel. Итоговый JS код чист, прост и может быть запущен в любой среде, поддерживающий JavaScript: браузеры, node и в ваших приложениях.
Типы данных
Чтобы программы были полезными, нам нужно иметь возможность работать с некоторыми простейшими единицами данных: числами, строками, структурами, логическими значениями и т.п. В TypeScript мы поддерживаем почти те же типы, которые вы ожидаете в JavaScript.
Boolean
let isDone: boolean = false;
Number
Как и в JavaScript, все числа в TypeScript являются значениями с плавающей запятой. Числа с плавающей точкой получают тип number
. В дополнение к шестнадцатеричным и десятичным литералам, TypeScript также поддерживает двоичные и восьмеричные литералы, представленные в ECMAScript 2015.
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
String
Еще одна фундаментальная часть создания программ на JavaScript для веб-страниц и серверов - работа с текстовыми данными. Как и в других языках, мы используем тип string
для ссылки на эти текстовые типы данных. Как и JavaScript, TypeScript также использует двойные кавычки (") или одинарные кавычки (') для окружения строковых данных.
let color: string = "blue";
color = 'red';
Вы также можете использовать template strings
, которые могут объединять несколько строк и иметь встроенные выражения. Строки окружены символом backtick / backquote (`)
, а встроенные выражения имеют вид $ {expr}
.
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${fullName}.
Array
TypeScript, как и JavaScript, позволяет работать с массивами значений. Типы массивов могут быть записаны одним из двух способов. В первом случае вы используете тип элементов, за которым следует [], чтобы обозначить массив этого типа элемента:
let list: number[] = [1, 2, 3];
Второй способ использует универсальный тип массива Array <elemType>
:
let list: Array<number> = [1, 2, 3];
Tuple
Типы tuple
позволяют вам выражать массив с фиксированным числом элементов, типы которых известны, но не обязательно должны быть одинаковыми. Например, вы можете представить значение в виде пары string
и number
:
// Декларируем тип tuple
let x: [string, number];
// Правильно инициализируем
x = ["hello", 10]; // OK
// Неправильно инициализируем
x = [10, "hello"]; // Ошибка
Enum
Полезным дополнением к стандартному набору типов данных из JavaScript является enum
. Как и в таких языках, как C#, enum - это способ придания более понятных имен наборам числовых значений.
enum Color {
Red,
Green,
Blue,
}
let c: Color = Color.Green;
По умолчанию enum нумеруют свои элементы, начиная с 0. Вы можете изменить это, вручную установив значение одного из его элементов. Например, мы можем начать предыдущий пример с 1 вместо 0:
enum Color {
Red = 1,
Green,
Blue,
}
let c: Color = Color.Green;
Или даже вручную установите все значения в enum:
enum Color {
Red = 1,
Green,
Blue,
}
let c: Color = Color.Green;
Удобной особенностью enum является то, что вы также можете перейти от числового значения к названию этого значения в enum. Например, если бы у нас было значение 2, но мы не были уверены в том, что ему совпадает в enum Color, мы могли бы найти соответствующее название через:
enum Color {
Red = 1,
Green,
Blue,
}
let colorName: string = Color[2];
console.log(colorName); // Выводит 'Green'
Any
Возможно, нам потребуется описать тип переменных, которые мы не знаем, когда пишем приложение. Такие значения могут исходить из динамического контента, например, от пользователя или сторонней библиотеки. В этих случаях мы хотим отказаться от проверки типов во время компиляции. Для этого мы помечаем их типом any
:
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;
Void
void
является почти противоположностью any
: отсутствие наличия какого-либо типа вообще. Обычно вы можете увидеть это как возвращаемый тип функций, которые не возвращают значение:
function warnUser(): void {
console.log("This is my warning message");
}
Объявление переменных типа void
бесполезно, поскольку вы можете присваивать им только null или undefined:
let unusable: void = undefined;
unusable = null;
Null и Undefined
В TypeScript как undefined
, так и null
фактически имеют свои собственные типы с именами undefined и null соответственно. Как и void
, они не очень полезны сами по себе:
let u: undefined = undefined;
let n: null = null;
Never
Тип never
представляет тип значений, которые никогда не встречаются. Например, never
является возвращаемым типом для выражения функции или стрелочной функции, которая всегда выдает исключение, или которое никогда не возвращается.
function error(message: string): never {
throw new Error(message);
}
function fail() {
return error("Something failed");
}
function infiniteLoop(): never {
while (true) {}
}
Object
object
это непримитивный тип, т.е. Всё что не number, string, boolean, symbol, null, или undefined.
Typescript определяет другой тип, с почти таким же названием, как и новый тип object
, и это тип Object
. В то время как object
(с маленькой буквы) представляет все непримитивные типы, Object
(с большой буквы) описывает функциональность, общую для всех JavaScript объектов (как бы прототип от базового типа Object). Например, методы toString() и hasOwnProperty().
Есть ещё один тип, который очень похож: {}
, пустой тип объекта. Он описывает объект у которого нет собственных свойств. При попытке доступа к произвольным свойствам такого объекта TypeScript выдаёт ошибку во время компиляции:
// Type {}
const obj = {};
// Error: Property 'prop' does not exist on type '{}'.
obj.prop = "value";
Тем не менее, вы можете использовать все свойства и методы, описанные в типе Object, которые неявно доступны через цепочку прототипов:
Top comments (0)