Відповіді:
Ключове слово extendsможна використовувати лише для інтерфейсів та класів.
Якщо ви просто хочете оголосити тип, який має додаткові властивості, ви можете використовувати тип перетину :
type UserEvent = Event & {UserId: string}
UPDATE для TypeScript 2.2, тепер можна мати інтерфейс, який розширює об’єктоподібний тип , якщо тип задовольняє деяким обмеженням:
type Event = {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Це не працює навпаки - його UserEventпотрібно оголосити як інтерфейс, а не, typeякщо ви хочете використовувати extendsсинтаксис.
І це все ще неможливо використовувати extend з довільними типами - наприклад, він не працює, якщо Eventє параметром типу без будь-яких обмежень.
interface A<T> extends B<T> {blar}Інтерфейс може розширювати лише тип об'єкта або перетин типів об'єктів зі статично відомими членами
interface Identifiable<T> extends T { id: string }дає мені помилку "Інтерфейс може розширювати лише тип об'єкта або перетин типів об'єктів зі статично відомими members.ts (2312)"
Те, що ви намагаєтесь досягти, рівнозначне
interface Event {
name: string;
dateCreated: string;
type: string;
}
interface UserEvent extends Event {
UserId: string;
}
Те, як ви визначили типи, не дозволяє вказати спадкування, однак ви можете домогтися чогось подібного, використовуючи типи перетину, як вказував Артем .
interfaceколи я насправді маю на увазіtype
typeКлючове слово використовується для визначення псевдонімів типів , а НЕ інтерфейсів або класів.