Voitko määrittää useita tyyppirajoituksia TypeScriptin geneerikoille


Minulla on geneerinen rajapinta, joka on tämän esimerkin kaltainen ja jossa on yksi tyypin rajoite:

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

Onko mahdollista määrittää useita tyyppirajoituksia yhden sijaan?

Vastaus #1

Typescript ei salli syntaksia <T extends A, B> geneeristen rajoitteiden yhteydessä. Voit kuitenkin saavuttaa saman semantiikan leikkausoperaattorilla &:

interface Example<T extends MyClass & OtherClass> {}

Nyt T saa ominaisuuksia sekä MyClass:sta että OtherClass:sta.

Vastaus #2

Kiertotie tälle olisi käyttää super-rajapintaa (joka myös vastaa kysymykseen 'miksi sallisit rajapinnan periä luokan').

interface ISuperInterface extends MyClass, OtherClass {

}

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

Aiheeseen liittyviä artikkeleita