Подтвердить что ты не робот

Можете ли вы указать множественные ограничения типа для TypeScript Generics

У меня есть общий интерфейс, например, этот пример с ограничением одного типа:

export interface IExample<T extends MyClass> {
    getById(id: number): T;
}

Можно ли указать несколько ограничений типа вместо одного?

4b9b3361

Ответ 1

Typescript поддерживает типы объединения и типы пересечений. В вашем случае вы хотите пересечение:

interface Example<T extends MyClass & OtherClass> {}

Для союза обоих типов:

interface Example<T extends MyClass | OtherClass> {}

Ответ 2

Работа для этого будет заключаться в использовании суперинтерфейса (который также отвечает на вопрос "почему вы позволили бы интерфейсу наследовать от класса" ).

interface ISuperInterface extends MyClass, OtherClass {

}

export interface IExample<T extends ISuperInterface> {
    getById(id: number): T;
}

Ответ 3

Отрекомендуйте комментарий об интерфейсе, полученном из класса... whats in name?

Я нашел это в разделе 3.5 спецификации 0.9.0:

В объявлениях интерфейса вводятся только именованные типы, тогда как класс декларации вводят именованные типы и функции конструктора, которые создавать экземпляры реализаций названных типов. Названный типы, введенные декларациями класса и интерфейса, имеют только незначительные различия (классы can not объявляют необязательные члены и интерфейсы не могут объявлять частных членов) и находятся в большинстве контекстов взаимозаменяемы. В частности, декларации классов только с публичными члены вводят именованные типы, которые функционируют точно так же, как созданные по объявлениям интерфейса.