在Typescript中扩展泛型参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Typescript中扩展泛型参数相关的知识,希望对你有一定的参考价值。

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

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

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

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

给我错误:

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

有没有办法做到这一点?

答案

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

显然你可以这样做:

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

这有利于在碰巧拥有自己的isChecked属性时不破坏对象。

另一答案

Since TypeScript 1.6你可以使用intersection types

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

以上是关于在Typescript中扩展泛型参数的主要内容,如果未能解决你的问题,请参考以下文章

扩展类型的泛型和 Typescript 中的普通类型有啥区别?

TypeScript专题之泛型

如何在 Typescript 中正确扩展泛型类?

如何在 TypeScript 3+ 中正确键入通用元组剩余参数?

TypeScript 入门14.泛型

如何在 typescript 中为泛型类编写扩展作为 getter