Table of Contents #

Введение #

Typescript является языком со статической типизацией. Тип не может быть изменен в ходе выполнения программы. Это позволяет снизить большое количество ошибок и выявить многие из них еще на этапе компиляции.

В Typescript есть несколько простых типов данных: numbers (числа), strings (строки), structures (структуры), boolean (логический). Он поддерживает все типы, которые есть в Javascript, дополняя удобным типом перечислений (enum).

Boolean #

Наиболее базовым типом является логический ture/false, который в Javascript и Typescript называется boolean.

let isDone: boolean = false;

Number #

Как и в Javascript, тип numbers в Typescript являются числом с плавающей точкой. Кроме десятичного и шестнадцатиричного формата, поддерживаются бинарный и восьмеричный, введенные в ECMAScript 2015.

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

String #

Еще одна важная часть программ в веб-страницах и серверах это текстовые данные. Как и в других языках, в Typescript используется то же обозначение "string" для таких данных. Как и Javascript, в Typescript используются двойные (") или одинарные (') кавычки для обрамления текстовых данных.

let name: string = "bob";
name = 'smith';

Вы также можете использовать строки с шаблонами, которые могут быть многострочными и иметь встроенные выражения. Эти строки окружаются обратными апострофами или кавычками(`) и встроенные выражения обозначаются как ${ expr }.

let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }.

I'll be ${ age + 1 } years old next month.`

Эквивалент этого объявления sentence:

let sentence: string = "Hello, my name is " + name + ".\n\n" +
    "I'll be " + (age + 1) + " years old next month."

Array #

TypeScript, как и JavaScript, имеет массивы значений. Тип массива может быть определен одним из двух способов. Первый - обозначать тип элементов массива перед []:

let list: number[] = [1, 2, 3];

Второй способ - использовать обобщение Array<elemType>:

let list: Array = [1, 2, 3];

Tuple #

Тип Tuple дает вам возможность объявить массив с известным фиксированным количеством элементов, которые не обязаны быть одного типа. Например, вы хотите иметь значение Tuple как пару "строка" и "число":

// Объявление типа tuple
let x: [string, number];
// Его инициализация
x = ['hello', 10]; // OK
// Некорректная инициализация вызовет ошибку
x = [10, 'hello']; // Error

Когда вы получаете элемент с известным идексом, будет возвращен тип этого элемента:

console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

При получении элемента с идексом вне известного диапазона, будет возвращен тип Union:

x[3] = 'world'; // OK, тип string может быть присвоен (string | number)

console.log(x[5].toString()); // OK, 'string' и 'number' оба имеют метод toString

x[6] = true; // Ошибка, boolean это не (string | number)

Тип Union будет описан чуть позже, в разделе продвинутых типов.

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 Color {Red = 1, Green = 2, Blue = 4};
let c: Color = Color.Green;

Удобная особенность перечислений состоит в том, что вы также можете получить имя члена перечисления, передав его числовое значение. Например, если у нас есть значение 2 и мы хотим посмотреть, чему оно соответствует в перечислении Color описанном выше, мы можем сделать это так:

enum Color {Red = 1, Green, Blue};
let colorName: string = Color[2];

alert(colorName);

Any #

Нам может потребоваться описать тип переменных, который мы не знаем, когда пишем наше приложение. Эти значения могут быть получены из динамического контента, например от пользователя или от сторонней библиотеки. В этих случаях мы хотим отключить проверку типов и позволить значениям пройти проверку на этапе компиляции. Чтобы это сделать, нужно использовать тип any:

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // ok, это определенно boolean

Тип any - это мощный способ работы с существующим Javascript, который позволяет вам постепенно включать все больше проверок типов на этапе компиляции. Вы можете ожидать, что Object будет играть такую же роль, какую и в других языках. Но переменные типа Object позволяют вам только присваивать им любое значение. Вы не можете вызывать у них необъявленные методы, даже те, которые могут существовать на этапе исполнения программы:

let notSure: any = 4;
notSure.ifItExists(); // ifItExists может существовать на этапе исполнения
notSure.toFixed(); // метод toFixed существует (но компилятор не проверяет это)

let prettySure: Object = 4;
prettySure.toFixed(); // Ошибка: Свойство 'toFixed' не существует у типа 'Object'.

Тип any может быть также полезен, если вы знаете некоторую часть типа переменной, но не весь. Например, у вас может быть массив с элементами различных типов:

let list: any[] = [1, true, "free"];

list[1] = 100;

Void #

void это нечто противоположное any: отсутствие каких-либо типов. Чаще всего он используется в качестве возвращаемого типа функций, которые не возвращают никакого значения.

function warnUser(): void {
    alert("This is my warning message");
}




Объявление переменных с типом void бесполезно, потому что вы можете присвоить им только значения undefined или null:

let unusable: void = undefined;

Type assertions (Приведение к типу) #

Иногда вы попадаете в ситуацию, когда знаете больше о значении переменной, чем Typescript. Обычно это случается, когда вы знаете, что тип некоторой сущности может быть более специфичным, чем ее текущий.

Type assertions - это способ сказать компилятору "поверь мне, я знаю, что делаю". Type assertion это как приведение к типу в других языках, но оно не делает никаких специальных проверок или реструктуризаций данных. Приведение к типу не имеет никакого воздействия на этапе выполнения программы и используется только компилятором. Typescript предполагает, что программист сделает все необходимые проверки, которые потребуются.

Приведение к типу может быть сделано двумя способами. Первый это использование синтаксиса угловых скобок:

let someValue: any = "this is a string";

let strLength: number = (someValue).length;

И другой - использование ключевого слова as:

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;

Эти два примера эквивалентны. Использование одного из них это просто выбор более предпочтительного варианта; тем не менее, когда вы используете Typescript с JSX, возможно только приведение к типу через as.

Немного о let #

Вы могли заметить, что недавно было введено новое ключевое слово let вместо var из JavaScript, с которым вы знакомы. Ключевое слово let - это просто новый способ задания переменной в JavaScript, который уже доступен в Typescript. Мы обсудим детали позже, сейчас же просто знайте, что много проблем в Javascript можно избежать, используя let. Поэтому вы должны использовать его вместо var, где это возможно.

Источник







Поддержите перевод документации:



Поддерживатель | Github Репозиторий


Documentation generated by mdoc.
Молния! Обновления, новости и статьи Typescript.