JS Tower
JavaScript & TypeScriptМодуль 7: Основы TypeScript

Базовые типы

Примитивные типы в TypeScript

Цель урока

В этом уроке ты научишься:

  • Использовать примитивные типы
  • Понимать any, unknown, void, never
  • Работать с null и undefined

Примитивные типы

// Строка
let name: string = "Иван";

// Число
let age: number = 25;
let price: number = 99.99;

// Логический
let isActive: boolean = true;

any

Отключает проверку типов:

let value: any = "строка";
value = 123;      // OK
value = true;     // OK
value.foo();      // OK (но ошибка в рантайме!)

Избегай any

any убивает смысл TypeScript. Используй только в крайних случаях.


unknown

Безопасная альтернатива any:

let value: unknown = "строка";

// value.toUpperCase(); // Ошибка!

// Нужна проверка типа
if (typeof value === "string") {
  console.log(value.toUpperCase()); // OK
}

void

Функция ничего не возвращает:

function log(message: string): void {
  console.log(message);
}

// void !== undefined
let result: void = undefined; // OK
// let result: void = null; // Ошибка в strict mode

never

Функция никогда не завершается:

// Выбрасывает ошибку
function throwError(message: string): never {
  throw new Error(message);
}

// Бесконечный цикл
function infiniteLoop(): never {
  while (true) {}
}

null и undefined

let u: undefined = undefined;
let n: null = null;

// С strictNullChecks
let name: string = null; // Ошибка!

// Нужен union type
let name: string | null = null;

Приведение типов

Type Assertion

let value: unknown = "hello";

// Способ 1: as
let str: string = value as string;

// Способ 2: угловые скобки
let str2: string = <string>value;

console.log(str.toUpperCase()); // "HELLO"

Осторожно

Type assertion не проверяет тип в рантайме. Используй только когда уверен.


Проверка типов

function process(value: unknown) {
  if (typeof value === "string") {
    console.log(value.toUpperCase());
  } else if (typeof value === "number") {
    console.log(value.toFixed(2));
  }
}

process("hello"); // "HELLO"
process(3.14159); // "3.14"

Сводная таблица

ТипОписание
stringСтрока
numberЧисло
booleantrue/false
anyЛюбой тип (небезопасно)
unknownНеизвестный тип (безопасно)
voidОтсутствие значения
neverНикогда не возвращает
nullПустое значение
undefinedНе определено

Практика

Задание 1: Базовые типы

Задача: Объяви переменные правильных типов.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
Задача 5 false

Задание 2: unknown

Задача: Безопасно обработай unknown.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
HELLO

Задание 3: void

Задача: Создай функцию с типом void.

Запустите код для проверки
Loading...
Ваш вывод:
Ожидаемый результат:
Привет, Мир!

Проверь себя

  1. Чем any отличается от unknown?
  2. Когда использовать void?
  3. Когда использовать never?