我无法让TypeScript编译器给我带来悲伤。我有一个控制器,它有一个类数组,不是类的实例,而是类本身。所有这些都将延伸到同一个基础UnitView
。出于某种原因,如果我的TitleView
不接受泛型,我会收到错误,但如果确实没有错误,我会收到错误。
我不理解为什么TitleView
需要接受泛型,因为它将Model类型明确传递给UnitView
。任何人都可以解释或看到我做错的事吗?
代码:
class Model { }
class View<TModel extends Model> {
private model: TModel;
}
class UnitView<TModel extends Model> extends View<TModel> { }
class TitleView extends UnitView<Model> { }
class Controller {
private ViewClass: typeof UnitView;
private ViewClasses: typeof UnitView[] = [
TitleView
]
}
here是TypeScript playground的直接链接,如果你想在那里进行测试
答案 0 :(得分:2)
该错误与数组无关。以下是您的错误的最小复制品:
foreach( var p in playerNames )
{
Console.WriteLine( "Id " + p.Key );
Console.WriteLine( "Name " + p.Value );
}
class View<TModel> {
model: TModel;
}
class UnitView<TModel> extends View<TModel> { }
class TitleView extends UnitView<{}> { }
const example1: typeof UnitView = TitleView; // ERROR
不可分配给TileView
。关键原因是typeof UnitView
(通用)的类型与T
不兼容。
这类似于下面显示的进一步简化的示例:
{}
泛型class Foo<T> {
model: T
}
class Bar{
model: {}
}
const example2: typeof Foo = Bar; // ERROR
和实例(偶数T
)与分配不兼容。这是设计的。
保持兼容的唯一方法是同时保留{}
,例如
generic
答案 1 :(得分:0)
为了补充basarat的答案,这是一份工作声明:
float