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;
}
