DEV Community

Arif Balaev
Arif Balaev

Posted on

[TypeScript] Основные типы данных

TypeScript:

  • расширяет JavaScript, добавляя типы к языку.
  • ускоряет процесс разработки, выявляя ошибки и предоставляя исправления еще до того, как вы запустите свой код.
  • open source

Типы предоставляют способ описания формы объекта, предоставляют лучшую документацию и позволяют TypeScript'у проверять правильность работы вашего кода.

TypeScript код транспилируется в JS через компилятор TS или Babel. Итоговый JS код чист, прост и может быть запущен в любой среде, поддерживающий JavaScript: браузеры, node и в ваших приложениях.

Типы данных

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

Boolean

let isDone: boolean = false;
Enter fullscreen mode Exit fullscreen mode

Number

Как и в JavaScript, все числа в TypeScript являются значениями с плавающей запятой. Числа с плавающей точкой получают тип number. В дополнение к шестнадцатеричным и десятичным литералам, TypeScript также поддерживает двоичные и восьмеричные литералы, представленные в ECMAScript 2015.

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
Enter fullscreen mode Exit fullscreen mode

String

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

let color: string = "blue";
color = 'red';
Enter fullscreen mode Exit fullscreen mode

Вы также можете использовать template strings, которые могут объединять несколько строк и иметь встроенные выражения. Строки окружены символом backtick / backquote (`), а встроенные выражения имеют вид $ {expr}.

let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${fullName}.
Enter fullscreen mode Exit fullscreen mode

Array

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

let list: number[] = [1, 2, 3];
Enter fullscreen mode Exit fullscreen mode

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

let list: Array<number> = [1, 2, 3];
Enter fullscreen mode Exit fullscreen mode

Tuple

Типы tuple позволяют вам выражать массив с фиксированным числом элементов, типы которых известны, но не обязательно должны быть одинаковыми. Например, вы можете представить значение в виде пары string и number:

// Декларируем тип tuple
let x: [string, number];
//  Правильно инициализируем
x = ["hello", 10]; // OK
// Неправильно инициализируем
x = [10, "hello"]; // Ошибка
Enter fullscreen mode Exit fullscreen mode

Enum

Полезным дополнением к стандартному набору типов данных из JavaScript является enum. Как и в таких языках, как C#, enum - это способ придания более понятных имен наборам числовых значений.

enum Color {
  Red,
  Green,
  Blue,
}
let c: Color = Color.Green;
Enter fullscreen mode Exit fullscreen mode

По умолчанию enum нумеруют свои элементы, начиная с 0. Вы можете изменить это, вручную установив значение одного из его элементов. Например, мы можем начать предыдущий пример с 1 вместо 0:

enum Color {
  Red = 1,
  Green,
  Blue,
}
let c: Color = Color.Green;
Enter fullscreen mode Exit fullscreen mode

Или даже вручную установите все значения в enum:

enum Color {
  Red = 1,
  Green,
  Blue,
}
let c: Color = Color.Green;
Enter fullscreen mode Exit fullscreen mode

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

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

console.log(colorName); // Выводит 'Green'
Enter fullscreen mode Exit fullscreen mode

Any

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

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;
Enter fullscreen mode Exit fullscreen mode

Void

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

function warnUser(): void {
  console.log("This is my warning message");
}
Enter fullscreen mode Exit fullscreen mode

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

let unusable: void = undefined;
unusable = null;
Enter fullscreen mode Exit fullscreen mode

Null и Undefined

В TypeScript как undefined, так и null фактически имеют свои собственные типы с именами undefined и null соответственно. Как и void, они не очень полезны сами по себе:

let u: undefined = undefined;
let n: null = null;
Enter fullscreen mode Exit fullscreen mode

Never

Тип never представляет тип значений, которые никогда не встречаются. Например, never является возвращаемым типом для выражения функции или стрелочной функции, которая всегда выдает исключение, или которое никогда не возвращается.

function error(message: string): never {
  throw new Error(message);
}

function fail() {
  return error("Something failed");
}

function infiniteLoop(): never {
  while (true) {}
}
Enter fullscreen mode Exit fullscreen mode

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";
Enter fullscreen mode Exit fullscreen mode

Тем не менее, вы можете использовать все свойства и методы, описанные в типе Object, которые неявно доступны через цепочку прототипов:

Top comments (0)