Контракты объектов (интерфейсы) и поддержкой расширений | Вопросы для собеседования | Skilio
/s/public
TypeScript Новичок Опубликовано
Контракты объектов (интерфейсы) и поддержкой расширений
Вопрос:

Объясните, как интерфейсы в TypeScript помогают определить форму объекта.

Подсказки:

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

Выше ожиданий:

  • Как интерфейсы могут расширять другие интерфейсы или классы для создания сложных типов.
  • Понятие пересекающихся типов и их отличия от интерфейсов.
  • Как интерфейсы сравниваются с алиасами типов в TypeScript.
  • Как интерфейсы могут использоваться для определения типов функций.
Ответ:

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

Определение формы объекта

Интерфейс определяет необходимые свойства (properties) и их типы для объекта. Определяя интерфейс, разработчики могут гарантировать, что объекты имеют необходимые свойства и что эти свойства имеют правильные типы.

interface User {
  name: string;
  age: number;
  email: string;
}

const user: User = {
  name: "Alice",
  age: 30,
  email: "alice@example.com"
};

Необязательные свойства

Интерфейсы позволяют использовать необязательные свойства с помощью символа ?.

interface User {
  name: string;
  age: number;
  email?: string; // Необязательное свойство
}

const userWithoutEmail: User = {
  name: "Bob",
  age: 25
};

Типо-безопасность и согласованность

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

Расширение интерфейсов

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

interface Person {
  name: string;
  age: number;
}

interface Employee extends Person {
  employeeId: number;
}

const employee: Employee = {
  name: "Charlie",
  age: 28,
  employeeId: 101
};

Пересечения типов (Insersection Types) против интерфейсов

В то время как интерфейсы определяют структуру, пересечения типов объединяют несколько типов в один. Для этого используют оператор & и отличаются от интерфейсов тем, что могут объединять типы, включая примитивные типы или типы объединения (union types), чего интерфейсы сделать не могут.

type Position = {
  x: number;
  y: number;
};

type Dimensions = {
  width: number;
  height: number;
};

type Rectangle = Position & Dimensions;

const rect: Rectangle = {
  x: 10,
  y: 20,
  width: 100,
  height: 50
};

Интерфейсы против алиасов типов

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

type Point = {
  x: number;
  y: number;
};

interface Circle {
  radius: number;
}

// Слияние объявлений
interface Circle {
  color: string;
}

const myCircle: Circle = {
  radius: 10,
  color: "red"
};

Определение функциональных типов (function types)

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

interface Greet {
  (name: string): string;
}

const sayHello: Greet = (name: string) => `Hello, ${name}!`;

console.log(sayHello("Dana")); // Вывод: Hello, Dana!
0
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.