В TypeScript есть несколько способов расширить тип внутри интерфейса. Рассмотрим их подробнее.
1. Использование наследования интерфейсов:
Можно создать новый интерфейс, который расширяет другой интерфейс при помощи ключевого слова extends
. Например:
interface Person { name: string; age: number; } interface Employee extends Person { employeeId: number; department: string; } const employee: Employee = { name: "John", age: 30, employeeId: 12345, department: "IT" };
В данном примере интерфейс Employee
расширяет интерфейс Person
, добавляя два дополнительных свойства employeeId
и department
. Теперь объект employee
должен соответствовать интерфейсу Employee
.
2. Использование объединения типов:
TypeScript позволяет объединять типы с помощью оператора |
. Например:
interface Vehicle { type: "car" | "bike"; color: string; } const vehicle: Vehicle = { type: "car", color: "red" };
В данном примере тип type
может быть либо "car", либо "bike". Объект vehicle
должен иметь свойства type
и color
, где type
может быть только одним из допустимых значений.
3. Использование условного типа:
TypeScript предоставляет возможность использовать условные типы для создания динамического расширения типа. Это достигается путем использования ключевых слов extends
и infer
. Например:
interface Person { name: string; age: number; department: string; } type Employee<T> = T extends Person ? { employeeId: number } : never; const employee: Employee<Person> = { name: "John", age: 30, department: "IT", employeeId: 12345 };
В данном примере мы использовали условный тип Employee<T>
, который расширяет тип T
. Если T
соответствует типу Person
, то возвращается объект с добавленным свойством employeeId
. В противном случае возвращается тип never
.
В зависимости от вашего конкретного случая, вы можете выбрать один из этих способов или комбинировать их вместе для достижения требуемого расширенного типа.