作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想定义一个泛型类,如 Table <t>
其中 T 是表将绑定(bind)到的数据结构的接口(interface)。
因此该类将有一个类型为返回 Promise <t>
的函数.
但我还需要能够作为 props 传入,带有标签的列列表,它们是否可排序等。
此列列表需要与 <t>
的定义紧密耦合即,如果我对 <t>
的定义是
{
id: string,
description: string,
createdDate: Date
}
然后需要放入的列的列表必须是 3 列的列表,每列的键都是 id
, description
和 createdDate
分别。
我如何使用 Typescript 和 T 定义该列列表,以便如果您发送的列与 T 的定义不匹配,则编译失败。
谢谢
最佳答案
最简单的解决方案是不使用列表。对象字面量是更好的选择,因为它已经检查过没有重复出现,并且映射类型可以很容易地用于创建基于 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" },
})
我们也可以用列表来做,但只是开始查看问题所在。我们可能需要一个静态方法来创建表,因为我们需要额外的类型参数来获取列列表的类型。
此外,代码完成可能会更好地与对象文字解决方案一起工作,这对开发体验很重要。
关于javascript - typescript 泛型定义依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52497307/
我是一名优秀的程序员,十分优秀!