Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про TypeScript: structural, typing, compatibility

Что такое структурная типизация в TypeScript?

Этот вопрос проверяет понимание фундаментальной системы типов TypeScript и отличий структурной типизации от номинальной.

Короткий ответ

Структурная типизация - это подход, при котором совместимость типов определяется их структурой (полями и методами), а не явными объявлениями или именами. TypeScript проверяет, что объект имеет все требуемые свойства с правильными типами, независимо от того, какой тип был объявлен у этого объекта.

Длинный ответ

Структурная типизация в TypeScript

Структурная типизация (structural typing) - это основополагающая концепция системы типов TypeScript, которая отличается от номинальной типизации, используемой в таких языках как Java или C#.

Основная концепция

В структурной типизации два типа считаются совместимыми, если они имеют одинаковую структуру:

typescript

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

// Этот объект совместим с Person, хотя он не объявлен как Person
const user = { name: "Иван", age: 30 };
const person: Person = user; // OK - структура совпадает

Сравнение с номинальной типизацией

Структурная типизация:

  • Проверяет форму объектов

  • Типы с одинаковой структурой совместимы

  • Используется в TypeScript, Go

Номинальная типизация:

  • Проверяет явные объявления типов

  • Требует явного наследования или реализации

  • Используется в Java, C#

Примеры структурной типизации

1. Совместимость объектов

typescript

interface Point {
  x: number;
  y: number;
}

// Объект с дополнительными свойствами тоже совместим
const point3D = { x: 1, y: 2, z: 3 };
const point: Point = point3D; // OK

function printPoint(p: Point) {
  console.log(p.x, p.y);
}

printPoint(point3D); // OK - структура Point присутствует

2. Совместимость функций

typescript

type Adder = (a: number, b: number) => number;

// Функция совместима, если параметры и возвращаемое значение совместимы
const multiply: Adder = (x: number, y: number) => x * y; // OK

Преимущества структурной типизации

  • Гибкость: Не требует явных объявлений типов

  • Декомпозиция: Позволяет легко комбинировать типы

  • Утилитарность: Фокус на том, что объект может делать, а не что он есть

Потенциальные проблемы

typescript

interface User {
  id: number;
  name: string;
}

// Оба объекта структурно совместимы с User
const correctUser = { id: 1, name: "Иван" };
const wrongUser = { id: "1", name: "Иван" }; // Ошибка - id должен быть number

// Но эта проблема выявляется на этапе компиляции

Использование в практике

Структурная типизация полезна при работе с внешними библиотеками:

typescript

// Мы можем использовать объекты, которые структурно совпадают
// с ожидаемыми типами, без явного приведения типов
fetch('/api/users')
  .then(res => res.json())
  .then((users: User[]) => {
    // TypeScript проверит структуру полученных данных
  });

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#structural

#typing

#compatibility

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию