Ответ 1
Typescript поддерживает типы объединения и типы пересечений. В вашем случае вы хотите пересечение:
interface Example<T extends MyClass & OtherClass> {}
Для союза обоих типов:
interface Example<T extends MyClass | OtherClass> {}
У меня есть общий интерфейс, например, этот пример с ограничением одного типа:
export interface IExample<T extends MyClass> {
getById(id: number): T;
}
Можно ли указать несколько ограничений типа вместо одного?
Typescript поддерживает типы объединения и типы пересечений. В вашем случае вы хотите пересечение:
interface Example<T extends MyClass & OtherClass> {}
Для союза обоих типов:
interface Example<T extends MyClass | OtherClass> {}
Работа для этого будет заключаться в использовании суперинтерфейса (который также отвечает на вопрос "почему вы позволили бы интерфейсу наследовать от класса" ).
interface ISuperInterface extends MyClass, OtherClass {
}
export interface IExample<T extends ISuperInterface> {
getById(id: number): T;
}
Отрекомендуйте комментарий об интерфейсе, полученном из класса... whats in name?
Я нашел это в разделе 3.5 спецификации 0.9.0:
В объявлениях интерфейса вводятся только именованные типы, тогда как класс декларации вводят именованные типы и функции конструктора, которые создавать экземпляры реализаций названных типов. Названный типы, введенные декларациями класса и интерфейса, имеют только незначительные различия (классы can not объявляют необязательные члены и интерфейсы не могут объявлять частных членов) и находятся в большинстве контекстов взаимозаменяемы. В частности, декларации классов только с публичными члены вводят именованные типы, которые функционируют точно так же, как созданные по объявлениям интерфейса.