Compito 2: Data la presenza di più dichiarazioni di interfaccia Todo di seguito, spiega cosa succede quando sono presenti nello stesso ambito. Discuta di come TypeScript le tratta e riempi l'oggetto `myTodo` per soddisfare i requisiti dell'interfaccia Todo unificata. ```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 AI
Risposta dell'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нужно указать все свойства из объединённого интерфейса.