通用类的TypeScript数组

时间:2017-09-20 23:29:49

标签: javascript typescript generics

我无法让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的直接链接,如果你想在那里进行测试

2 个答案:

答案 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不兼容。

这类似于下面显示的进一步简化的示例:

{}

TLDR

泛型class Foo<T> { model: T } class Bar{ model: {} } const example2: typeof Foo = Bar; // ERROR 和实例(偶数T)与分配不兼容。这是设计的。

更多

保持兼容的唯一方法是同时保留{},例如

generic

答案 1 :(得分:0)

为了补充basarat的答案,这是一份工作声明:

float