特性: VisualizationSpec<MyDataType>
作者: NickCrews创建于 2026年3月6日更新于 2026年3月9日
标签feature-request
- 检查是否有重复的问题。请将单独的请求作为单独的问题提交到 GitHub。搜索执行了: - https://GitHub.com/vega/vega/issues?q=sort%3Aupdated-desc%20type%20generic - https://GitHub.com/vega/vega/issues?q=sort%3Aupdated-desc%20type%20parameter%20spec%20(state%3Aopen%20OR%20state%3Amerged) - [X] 清楚描述特性请求的目标。为什么需要它? - [X] 描述一个设想的解决方案。你希望新的行为是什么? - [x] 如果适用,请分享模型图像或链接到说明所需输出的示例。 - [x] 如果适用,请分享 JSON 规范设计,以说明如何在 Vega 中提供此行为。 我希望在使用规范时获得更好的类型安全。 例如,我有以下规范:
TypeScript const donationCounts = [{source: "apoc", count: 5}, ...] const donationsRawBySourceChart: Spec = { $schema: "https://vega.GitHub.io/schema/vega-lite/v5.json", data: { values: donationCounts }, mark: "bar", encoding: { x: { field: "source", type: "nominal", title: "Source" }, y: { field: "count", type: "quantitative", title: "Count" }, }, } 这只在传入的 donationCounts 具有类型 `Array<{source: string, count: number> ` 时才能正常运行。如果我调整上游数据处理,将 `source` 重命名为 `src`,则此操作将在运行时失败。 我建议使用如下的 API:TypeScript const donationCounts = [{source: "apoc", count: 5}, ...] const donationsRawBySourceChart: Spec = { // ... } 然后,如果我更改上游数据源,将会在运行时得到类型错误。 它可以实现为: ```TypeScript // vega 可以接受的数据类型 type VegaRecord = Record<string, string | number | boolean | null | undefined | Date> type Spec 这样,有人可以使用普通的const mySpec: Spec = {...},而不需要类型参数,并且不会得到任何类型检查,但它是向后兼容的。 您对这个有什么看法?我是否看不到任何问题?我们是否应该考虑对其他类型参数进行参数化,而不仅仅是数据的形状? 如果您支持它,我可以尝试提交一个 PR。我对 TS 和类型着有相当深的了解,但我可能需要一些帮助来熟悉此代码库的细节,例如您指导我将新的测试放在哪里,以及它们应该测试什么。谢谢!
内容来源: vega/vega