Ich habe die folgende (einigermaßen komplexe) Verlängerungskette. Es ist ein minimales reproduzierbares Beispiel meines Problems (offensichtlich werden die Klassen Verhaltensimplementierungen in meiner Anwendung haben).TypeScript Compiler mit großer Vererbung/Erweiterung Kette verwechselt
export class BaseModel
{
public someBaseModelMethod(): void { }
}
export class BaseView
{
public someBaseViewMethod(): void { }
}
export class CollectionView<TChildView extends BaseView, TModel extends BaseModel>
extends BaseView
{
public someCollectionViewMethod(): void { }
}
export class ItemView<TModel extends BaseModel>
extends BaseView
{
public setItem(model: TModel): void { }
}
export interface IGridView<TChildView extends ItemView<TModel>, TModel extends BaseModel>
extends CollectionView<TChildView, TModel>
{
someGridViewMethod(): void;
}
export class GridView<TChildView extends ItemView<TModel>, TModel extends BaseModel>
extends CollectionView<TChildView, TModel>
implements IGridView<TChildView, TModel>
{
public someGridViewMethod(): void { }
}
function bind<TInterface>(key: string, implementation: new (...args: any[]) => TInterface) {
// do some bindings here
}
bind<IGridView<ItemView<BaseModel>, BaseModel>>("IGridView", GridView);
Wenn ich kompilieren, erhalte ich einen Fehler auf dem GridView
Teil der letzten Zeile (die bind
Anweisung). Der Fehler ist wie folgt:
TS2345 Argument of type 'typeof GridView' is not assignable to parameter of type 'new (...args: any[]) => IGridView<ItemView<BaseModel>, BaseModel>'.
Type 'CollectionView<any, any>' is not assignable to type 'IGridView<ItemView<BaseModel>, BaseModel>'.
Property 'someGridViewMethod' is missing in type 'CollectionView<any, any>'.
Wie Sie sehen können, ist es someGridViewMethod
erwartet auf CollectionView
zu sein. Jedoch GridView
erweitertCollectionView
, also warum erwartet es GridView
Methoden auf der CollectionView
Klasse zu finden?
Der Code kompiliert korrekt in 2.0.3
, aber nicht in 1.8.10
.
Dieser Code , wenn auf Spielplatz kopiert, produziert keine Fehler –
Sorry @NitzanTomer, ich habe auf datierte meine Frage - es kompiliert korrekt in '2.0.3' aber nicht in' 1.8.10' –