Sobes.tech
Middle

Aufgabe 2: Angenommen, es gibt mehrere Todo-Interface-Deklarationen unten, erkläre, was passiert, wenn sie im selben Gültigkeitsbereich vorhanden sind. Diskutiere, wie TypeScript sie behandelt, und fülle das `myTodo`-Objekt aus, um die Anforderungen des zusammengeführten Todo-Interfaces zu erfüllen. ```typescript interface Todo { title: string; dueDate: Date; } interface Todo { description: string; completed: boolean; } interface Todo { priority: 'high' | 'medium' | 'low'; completed: string; } const myTodo: Todo = {}; ```

sobes.tech KI

Antwort von 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 нужно указать все свойства из объединённого интерфейса.