Полное руководство по определению типов в TypeScript

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

  1. Аннотации типов:
    Аннотации типов явно указывают тип переменной, параметра или возвращаемого значения. Вот пример:
let age: number = 25;
function greet(name: string): string {
  return `Hello, ${name}!`;
}
  1. Вывод типа.
    Вывод типа позволяет TypeScript автоматически определять тип на основе присвоенного значения. Если аннотация типа не указана, TypeScript определяет тип. Например:
let age = 25; // age is inferred as number
const message = "Hello, TypeScript!"; // message is inferred as string
  1. Псевдонимы типов.
    Псевдонимы типов позволяют создавать собственные типы и повторно использовать их в коде. Они предоставляют способ дать имя выражению типа. Вот пример:
type Point = {
  x: number;
  y: number;
};
const p: Point = { x: 10, y: 20 };
  1. Интерфейсы:
    Интерфейсы определяют структуру объекта и могут использоваться для обеспечения соблюдения контрактов. Они описывают свойства, методы и сигнатуры, которые должен иметь объект. Вот пример:
interface Person {
  name: string;
  age: number;
  greet(): void;
}
const person: Person = {
  name: "John",
  age: 30,
  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  },
};
  1. Типы объединения:
    Типы объединения позволяют значению иметь несколько возможных типов. Они обозначаются символом вертикальной черты (|). Вот пример:
type Status = "success" | "error" | "loading";
function handleStatus(status: Status) {
  // ...
}
  1. Типы пересечений.
    Типы пересечений объединяют несколько типов в один. Они обозначаются символом амперсанда (&). Вот пример:
type Admin = {
  name: string;
  role: string;
};
type Employee = {
  name: string;
  id: number;
};
type AdminEmployee = Admin & Employee;
const adminEmployee: AdminEmployee = {
  name: "John",
  role: "Admin",
  id: 12345,
};
  1. Защита типа:
    Защита типа позволяет сузить тип значения внутри условного блока. Они полезны при работе с типами объединения. Вот пример:
function printId(id: number | string) {
  if (typeof id === "number") {
    console.log(`ID is a number: ${id}`);
  } else {
    console.log(`ID is a string: ${id}`);
  }
}

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