Обновлено:
Сегодня мой ученик задал вот такой хороший вопрос:
Всем привет! Возник вопрос по использованию Интерфейсов (interface), когда все-таки лучше их применять вместо Типов (type)?
Владилен в ролике по Интерфейсам (Модуль 3 - Блок 2 Работа с типами - 3 Интерфейсы) говорит о преимуществе использования Интерфейсов перед Типами, в пример приводится наследование от интерфейсов User и Address. Но то же самое можно сделать без копирования полей, а с использованием Intersection Type : Interfaces.
Речь идёт об уроке в курсе мидла в result.school
interface IPerson {
name: string;
age: number;
hobbies: string[];
};
interface IAddress {
city: string;
street: string;
};
interface IFullUser extends IPerson, IAddress {
date: Date;
};
vs Types
type TPerson = {
name: string;
age: number;
hobbies: string[];
};
type TAddress = {
city: string;
street: string;
};
type TFullUser = TPerson & TAddress & {
date: Date;
};
Поправьте, пожалуйста, если что-то не так понял. И еще не смотрел ролики дальше, мб там есть и другие примеры сравнений
И есть ли, вообще какая-то принципиальная разница?
В документации такое пишут.
Пожалуй ответ нужно начать с главного:
В сообществе TS разработчиков принято все объекты описывать используя
interface
, аtype
используют для семантического описания примитивов и различных комбинаций типов и интерфейсов.
Пример:
interface Pet {
name: string,
}
interface Cat extends Pet {
hasHair: boolean;
}
interface Dog extends Pet {
frendly: boolean;
}
type HomePet = Dog | Cat;
function addHomePet(pet: HomePet) {
cosole.log('pet:', pet);
}