0
我有以下(相當複雜)的擴展鏈。這是我的問題的一個最小可重現的例子(顯然這些類將在我的應用程序中有行爲實現)。與大型繼承/擴展鏈混淆的TypeScript編譯器
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);
當我編譯,我得到的最後一行(bind
語句)的GridView
部分錯誤。錯誤如下:
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>'.
正如你所看到的,它期待someGridViewMethod
是在CollectionView
。然而,GridView
延伸CollectionView
,那麼爲什麼期望在CollectionView
類找到GridView
方法?
的代碼編譯正確的2.0.3
,但不是在1.8.10
。
此代碼,當被複制到操場時,不會產生錯誤 –
對不起@NitzanTomer,我有約會我的問題 - 它在2.0.3中編譯正確,但不在1.8.10中編譯 –