打字稿泛型定义依赖性

时间:2018-09-25 11:37:38

标签: javascript reactjs typescript generics

我想定义一个像表<t>这样的通用类,其中T是表将要绑定到的数据结构的接口。

因此该类将具有键入返回Promise <t>的函数。

但是我还需要能够传递道具,带有标签的列列表,它们是否可排序等。

此列列表需要与<t>的定义紧密结合 即如果我对<t>的定义是

{
   id: string,
   description: string,
   createdDate: Date
}

然后,需要放入的列的列表必须是3列的列表,并且每个列的键分别为iddescriptioncreatedDate

如何使用Typescript和T定义该列列表,以便如果您发送的列与T的定义不匹配,则编译将失败。

谢谢

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是不使用列表。对象文字是一个更好的选择,因为它已经检查没有重复发生,并且映射的类型可以轻松地用于基于T创建具有相同键但具有不同类型的新类型:

interface Columns {
    id: string,
    description: string,
    createdDate: Date
}

interface IColumnDescription {
    name: string;
    // other props
}

class Table<T> {
    constructor(columns: Record<keyof T, IColumnDescription>) {

    }
}

new Table<Columns>({
    createdDate: { name: "Created Date" },
    description: { name: "Description" },
    id: { name: "Id" },
})

我们也可以使用列表来完成此操作,但是只是开始看看有什么问题。我们可能需要一个静态方法来创建表,因为我们需要额外的类型参数来获取列列表的类型。

代码完成也可能会更好地与对象字面量解决方案一起使用,这对开发人员的经验很重要。