Основы TypeScript: Объединение, Литеральные и Размеченные типы
Понимание этих возможностей позволит создавать более надёжные и тонкие системы типов. Присоединяйтесь к нам в этом путешествии по миру расширенных возможностей TypeScript в области типов.
Объединение типов
Объединение типов позволяет переменной иметь более одного типа. Для объединения типов используется оператор |
.
type Result = number | string;
function displayResult(result: Result): void {
console.log(result);
}
displayResult(42); // Output: 42
displayResult("hello"); // Output: hello
В этом примере Result
может быть как числом, так и строкой.
Литеральные типы
Литеральные типы позволяют указать точные значения, которые может иметь переменная. Это касается строковых литералов, числовых литералов, логических литералов и т. д.
type Direction = "up" | "down" | "left" | "right";
function move(direction: Direction): void {
console.log(`Moving ${direction}`);
}
move("up"); // Output: Moving up
move("right"); // Output: Moving right
Здесь Direction
— это литеральный тип, представляющий конкретные строки "up"
, "down"
, "left"
или "right"
.
Размеченное объединение типов
Tagged union type или Discriminated unions объявлены устаревшими и в текущей документации TypeScript отсутствуют. Но эту возможность можно использовать.
Размеченное объединение типов часто используется для моделирования сценариев, в которых значение может быть одним из нескольких типов, и вы хотите различать их с помощью общего свойства (тега).
interface Square {
kind: "square";
size: number;
}
interface Circle {
kind: "circle";
radius: number;
}
type Shape = Square | Circle;
function area(shape: Shape): number {
if (shape.kind === "square") {
return shape.size * shape.size;
} else {
return Math.PI * shape.radius * shape.radius;
}
}
const mySquare: Square = { kind: "square", size: 4 };
const myCircle: Circle = { kind: "circle", radius: 3 };
console.log(area(mySquare)); // Output: 16
console.log(area(myCircle)); // Output: 28.274333882308138
В этом примере Shape
— это размеченное объединение типов, имеющее две возможные формы: Square
и Circle
. Свойство kind
служит в качестве тега для различения двух форм.
Эти возможности предоставляют мощные инструменты для создания выразительных и точных определений типов, позволяя выявлять и внедрять в код специфические шаблоны.
Основы TypeScript
- Основы TypeScript: компилятор TypeScript (
tsc
) иtsconfig.json
- Основы TypeScript: JavaScript в сравнении с TypeScript
- Основы TypeScript: Примитивы и базовые типы
- Основы TypeScript: Неявные и Явные типы, Утверждения типов
- Основы TypeScript: Создание типов, перечислений и интерфейсов
- Основы TypeScript: Объединение, Литеральные и Размеченные типы
- Основы TypeScript: Типизация функций и сигнатур
- Основы TypeScript:
Any
,Void
,Never
,Null
, Строгие проверки Null - Основы TypeScript: ООП практика, классы и наследование