Typescript generisk grensesnitt<T> som utvider samme navn
Dette fungerer åpenbart fint i C#, men ikke i TypeScript. Finnes det en måte å omgå det på, eller må jeg bare bruke forskjellige navn?
export interface IThing<T> extends IThing {
Value: T;
}
export interface IThing {
Name?: string;
ValueStr?: string;
Type?: string;
}
Jeg får 'Alle deklarasjoner av IThing må ha identiske typeparametere'
Beklager hvis jeg er treg!
Svar #1
Du må bruke forskjellige navn, bare navnet betyr noe når du identifiserer grensesnittet, ikke antallet generiske typeparametere.
Generics blir fjernet ved kompileringstid i Typescript, så det er ingen måte å skille mellom forskjellige instanser av en generisk klasse. Selv om grensesnitt bare er en konstruksjon på kompileringstid og muligens kunne ha blitt skilt av navn så vel som antall generiske parametere, antar jeg at siden klasser fungerer på denne måten, ble det besluttet å la grensesnitt fungere på samme måte.
En løsning kunne være å bruke et standard typeargument for grensesnittet:
export interface IThing<T = any> {
Name?: string;
ValueStr?: string;
Type?: string;
Value: T;
}
var d: IThing;
var foo: IThing<number>
