在Typescript中扩展泛型参数

时间:2013-09-24 17:27:11

标签: knockout.js typescript

我想创建一个实用程序函数,通过向数组中的每个项添加isChecked knockout observable属性来创建核对表。此功能应如下所示:

createCheckList<T>(allEntities: T[], selected: T[]) : CheckListItem<T> {
    ...
}

我正在返回CheckListItem<T>,因为此接口应扩展T以添加isChecked属性。但是,打字稿不允许我这样做:

interface CheckListItem<T> extends T {
    isChecked: KnockoutObservable<boolean>;
}

给我错误:

  

接口只能扩展另一个类或接口。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

没有办法在TypeScript中表达这一点。

显然你可以这样做:

interface CheckListItem<T> {
    isChecked: KnockoutObservable<boolean>;
    item: T;
}

这样做的好处是,当碰到具有自己的isChecked属性时,不会破坏该对象。

答案 1 :(得分:1)

Since TypeScript 1.6您可以使用intersection types

type CheckListItem<T> = T & {
  isChecked: KnockoutObservable<boolean>;
};