Kan ikke se egenskapen til TypeScript-mikser
Jeg kan ikke se id til min eiendom når jeg bruker mixins (vs code/whisper).
Koden min er:
class User {
// @ts-ignore
id: number;
}
function Parent<TBase>(Base: TBase) {
return class ParentChild {
_object: TBase;
constructor (o: TBase) {
this._object = o;
}
dump(): void {
console.log(this._object);
}
};
}
class Test extends Parent(User) {
}
const o = {id: 2} as any;
const i = new Test(o);
// problem
console.log(i._object.id);
Problemet er på linjen console.log(i._object.id);. Jeg får en feil: Property 'id' does not exist on type 'typeof User'.
Hva er galt, og hvordan kan jeg fikse det?
Svar #1
Ved å sende Base som en parameter, bruker du typeof User (konstruktørfunksjonstypen) som TBase i stedet for User (typen til User-instanser). Jeg tror du bare vil bruke User, ved å spesifisere det generiske argumentet:
class User {
// @ts-ignore
id: number;
}
function Parent<TBase>() {
// ^^^^^^^^^
return class ParentChild {
_object: TBase;
constructor (o: TBase) {
this._object = o;
}
dump(): void {
console.log(this._object);
}
};
}
class Test extends Parent<User>() {
// ^^^^^^^^^^^^^^
}
const o = {id: 2} as any;
const i = new Test(o);
// problem
console.log(i._object.id);
Lekerom lenke
Et par andre notater:
- Det er ikke nødvendig med
as anypåo. - Side note: Hvis du bare vil ha strukturen til
Useruten implementasjon, brukinterface User { id: number; }i stedet forclass. Da trenger du ikke@ts-ignore. Playground-lenke.
