Sobes.tech
Back to questions
Middle
1

Task 2: Given multiple Todo interface declarations below, explain what happens when they are present in the same scope. Discuss how TypeScript treats them and fill in the `myTodo` object to satisfy the merged Todo interface requirements. ```typescript interface Todo { title: string; dueDate: Date; } interface Todo { description: string; completed: boolean; } interface Todo { priority: 'high' | 'medium' | 'low'; completed: string; } const myTodo: Todo = {}; ```

Companies where asked
Altenar

Answer from AI

sobes.tech AI

В TypeScript при объявлении нескольких интерфейсов с одинаковым именем происходит их слияние (declaration merging). Все свойства из всех интерфейсов объединяются в один итоговый интерфейс.

В данном примере три интерфейса Todo объявлены в одной области видимости, значит итоговый интерфейс будет содержать все свойства из всех трёх объявлений.

Однако есть конфликт: в двух интерфейсах объявлено свойство completed, но с разными типами — boolean и string. TypeScript не может объединить свойства с одинаковым именем, но разными типами, и выдаст ошибку.

Чтобы исправить ситуацию, нужно привести типы completed к одному типу или использовать объединение типов, например:

interface Todo {
    title: string;
    dueDate: Date;
}

interface Todo {
    description: string;
    completed: boolean | string; // объединяем типы
}

interface Todo {
    priority: 'high' | 'medium' | 'low';
}

const myTodo: Todo = {
    title: "Сделать домашку",
    dueDate: new Date('2024-07-01'),
    description: "Домашнее задание по TypeScript",
    completed: false, // или "yes"
    priority: 'high'
};

Если оставить как есть, TypeScript выдаст ошибку из-за конфликта типов completed.

Итог:

  • Интерфейсы с одинаковым именем объединяются.
  • Свойства с одинаковым именем должны иметь совместимые типы.
  • В объекте myTodo нужно указать все свойства из объединённого интерфейса.