Highcharts: 打字稿.d.ts

创建于 2015-12-23  ·  47评论  ·  资料来源: highcharts/highcharts

您是否可以在 npm 包(如angular )中部署 Typescript for Highcharts 的定义?

High Docs Enhancement

最有用的评论

我只是想通知,这个问题已成为高度优先事项。

所有47条评论

随着 TypeScript 的日益流行,我认为这需要发生。 许多其他 js 包现在开始包含他们自己的(官方)类型。 而不是将其留给绝对类型社区

这是我们正在考虑的事情。 应该可以制作一个节点脚本来从我们的API 转储中自动生成它。

+1 👍 也来自我。 绝对类型的存储库已经过时,在 Highcharts v4.2.x 之后只更新了零星和附带的属性。 但是Highcarts中的大部分

因此,应该更新绝对类型的存储库,或者 - 更方便 - 将它与 Highcharts 捆绑在一起甚至会是一个更好的解决方案。

让它自动生成听起来是一个不错的选择,但这可能仍然需要为 .d.ts 文件编写测试的部分手工劳动? 此外,它可能是自动生成的。

如果你想在那里包含手册文件,我愿意做一些工作来更新绝对类型的 repo 到当前版本,并在https://github.com/highcharts/highcharts上做一个 PR?

/cc @ry8806 @TorsteinHonsi

^ 我已经为实现 Highcharts v5.0.10的绝对类型存储库创建了一个 PR。 如果有人感兴趣,这可能是进一步工作的好地方(一旦合并)。 至少暂时,直到 TypeScript 定义文件与 Highcharts 本身一起部署。

拥有官方的 TypeScript 类型定义将不胜感激。 在输入图表配置时有很大帮助。

在这里,我们再次将类型定义视为现实背后的主要版本。 :/

鉴于这个库的复杂性,我认为最好的解决方案是从@TorsteinHonsi提到的“API 转储”生成类型定义。 但是,该链接似乎已损坏。 有新的吗? 我愿意尝试编写一个生成器。

但是,该链接似乎已损坏。 有新的吗?

是的,新的可从https://api.highcharts.com/highcharts/tree.json 获得。 这棵树是根据我们的 JSDoc 注释和解析的源代码生成的。

@cvasseng仅供参考。

@TorsteinHonsi谢谢,我会看看这个。 您是否使用特定风格的“jsdoc”(Google Closure,JSDoc 3?)JSON 转储是否发生在此代码库中的某个地方,我可以查看以供参考? 我问的原因是因为有现有的 JSDoc-to-TSDef 转换器可能会工作......

我们正在使用 JSDoc 3,但进行了大量扩展以能够描述我们的声明性选项结构。

@TorsteinHonsi看着 JSON 我有几个问题......你根本没有关于这种格式的模式文档? 这是我收集的。 您如何指定传递给Highcharts.setOptions()Highcharts.chart() (例如)? 是否也有类和命名空间的 API 转储?

@cvasseng

@aaronbeall ,我们目前没有关于架构的任何完整文档,但看起来您的定义中已经包含了所有内容。

Highcharts.setOptions()的选项和系列都作为我们使用它的模式本身之外的特殊情况处理,但我们应该至少将globallang更改为在主要选项结构之外。

作为旁注,旧的转储格式可在https://api.highcharts.com/dump.json 获得,我们现在已将其移回https://api.highcharts.com/highcharts/的原始位置

谢谢@cvasseng。 我开始修补这个……有很多数据,我有我的工作,只是为了理解这一切。 :) 我注意到一些字段没有类型,也没有默认类型来推断类型,例如boost.seriesThreshold ,但类型出现在 docs 中。 这些是作为特例处理的还是我遗漏了什么? 命名空间/类是否还有任何 API 模式,还是单独处理? 声明式模型是否意味着过时?

(我会有更多问题,有没有更好的地方来讨论这个问题?Gitter?我在这里很好,但它可能对某些人造成了相当大的噪音。)

boost.seriesThreshold实际上在tree.json (和实时文档中)看起来是错误的——它应该是一个数字,而不是一个字符串。 查看生成它的实际 doclet,其中缺少类型。 对于任何其他缺少类型的地方,情况也可能如此。 我们正在努力向生成阶段添加更多测试和检查,以便在 doclet 更改时自动找到这些以防止这种情况发生。

我们没有命名空间/类的架构,但它们由 vanilla JSDoc 3 处理,因此可以添加现有插件以自动为它们生成打字稿定义。 该部分的设置可以在这里找到: https :

在这里讨论这个工作得很好。 :) 这样我们就有了一个中央公共场所,以便其他人也可以遵循它。

如果有帮助,这是所有似乎没有类型的字段(在 highcharts/tree.json 中)type属性或default属性,因此它被分配给any 。 我可以为这些类型编写补丁文件,还是有更好的方法?

在顶级 JSON 和mapNavigation.buttons还有一个空白键。

我今天在这方面取得了一些进展,您可以在此处查看

  • 不确定如何组织输出。 现在有 559 个符号,其中包括诸如Highcharts.OptionsSeries类的重要内容,以及非常具体的小对象,如PlotOptionsBbTopLine 。 为避免名称冲突,它将全名转换为 PascalCase,例如plotOptions.bb.topLine 。 仍在努力弄清楚如何使它变得更好。 试图与当前的@types/highcharts进行比较有点困难,通常那里不存在的东西。
  • 我不确定我是否理解 highcharts/highstocks/highmaps 的关系。 (我个人只使用过 Highcharts。)API 转储是否包含所有产品的所有数据? 应该怎么分? 我必须更好地了解如何在项目中实际使用highstockhighmaps ......
  • 对象相互扩展的方式非常有意义,但我很难弄清楚如何将其转换为合理的类型。 目前使用&交叉类型合并对象,因为extends引发了很多关于不兼容扩展的错误。 目前没有处理excludes ,我开始使用Omit类型,但这引发了很多关于类型中不存在的省略字段的错误。 我认为这是因为在某些情况下,对象属性间接从父对象继承,所以它实际上没有应该省略的字段,父对象的属性有。 plotOptions.mfi.params就是一个例子,它不包括index但它没有index属性或extends一个有的对象,但是父plotOptions.mfi扩展了plotOptions.sma ,它有一个子plotOptions.sma.params属性,该属性具有index ,它与plotOptions.mfi.params合并在父级上。 是啊,还在纠结怎么处理。 :) 似乎我需要评估完全合并的树并从那里计算出类型......
  • 许多通用的ArrayObjectFunction类型......可能都在描述中有详细记录,但似乎没有在类型中表达。 也许对类型数据进行一些明智的修补会解决这个问题。 我最喜欢的是Array.<Array.<Mixed>> - 不知道那是什么。 :)

其他一些具体的事情:

  • ColorCSSObjectMixed类型是什么? Color似乎是格式化的stringCSSObject标准样式对象,还是特殊的东西?
  • series.bellcurve.dataseries.histogram.data都扩展了自身,创建了循环引用。 我认为这只是一个错字,他们可能是为了扩展其他东西?

此外,API 中也没有缺少您缺少的一些https://api.highcharts.com/highstock/plotOptions.bb.topLine.styles.lineColor。 如果我没记错的话,我们会在api-docs生成器中进行类型猜测,但这可以移动到highcharts.jsdoc.js脚本中,因此它将成为 tree.json 的一部分。

@cvasseng我们的官方 TypeScript 定义

上传了一个 repo 来玩这个,不过今天没有添加。

如果我没记错的话,我们会在api-docs生成器中进行类型猜测

我很想知道api-docs生成器是如何工作的。 它可以很好地理解 API 转储。 我正在寻找我不知道如何处理的事情。 例如series.bullet.data.targetOptions扩展series.bullet.targetOptions ,但是series.bullet.targetOptions的定义不存在......但是属性在文档中很好。 我想这是因为series.bullet扩展了plotOptions.bullet ,它有plotOptions.bullet.targetOptions ,所以series.bullet.targetOptions解析为plotOptions.bullet.targetOptions

编辑:今晚取得了一点进展,我对默认值的真实检查丢弃了所有文字false值,修复了这个问题,更多的东西被推断为布尔值。 不过,不确定布尔值是否是在某些地方推断的正确类型。 我还检查了values的文字类型(该信息非常棒!)。 无论如何,丢失的类型转储已更新。

在思考树如何扩展对象后取得了一些进展:

  • 想出了一种方法来解析在给定路径中合并的所有 defs 。 (这让我很费解……我想文档生成器会做这样的事情吗?)
  • 然后我通过删除路径上的覆盖从树的其他部分合并的其他定义,这删除了大约 100 个冗余对象定义和数百个冗余属性。 (许多“冗余”定义似乎在那里提供文档添加,如描述或默认值,但没有帮助类型定义......听起来对吗?)
  • 在那之后,缩减树中只有少数 defs 实际上缺少无法推断的类型,我在这里修补(这些更改在 jsdoc 本身中可能会很好)。 剩下的都可以推断出来(参见最新的“缺失类型”转储),尽管我没有验证推断出的类型总是正确的。 仍然存在诸如objectarrayfunction类的模糊类型的问题。
  • 这是在输出 TS 类型 defs 之前如何更改 def 树这个生成的输出,它开始看起来很有希望。

下一步是什么

  • 处理排除的字段,我认为我有一个使用Omit<> ,并通过将显式extends到所有具有excludes (使用第一个项目符号),并改回使用具有所有可选属性的接口。 我认为这会起作用,只要我们可以确定属性都是可选的? 是否有任何必需的属性?
  • 其他一些
  • 我会在假期后把它捡起来。 如果你们认为这是否朝着正确的方向发展,我会喜欢任何反馈。

问题

  • 什么是"memberof": "yaxis"tooltipValueFormat的Doclet是什么意思?
  • context值之一是PlotLineOrBand但我在类文档中没有看到,这是Series的子类吗?
  • plotOptions.series.states有 doclet 类型名称"plotOptions.series.states" —— 这是否意味着什么特别的东西?

@aaronbeall你有什么进展吗? 我还深入研究了 highcharts 的类型生成。

一个主要缺陷是生成的tree.json不包含 highcharts 的所有类型,如 highcharts 命名空间上的静态方法。 有效符号修剪后有703个符号。 但在那之后,tree.json 中的输出符号大约是 100。很多都被忽略了。

@scott-ho 这有一点是因为我在新的一年里使用 Highcharts 离开了这个项目,但我现在又回来了,很快就会回到这个项目中。

从我上一篇文章开始,我沿着将typeinterface并使用extends而不是&的路线(这是我正确支持tree.json使用特定字段的excludes ),并遇到问题:TS 不允许接口扩展另一个共享字段名称的接口,该字段名称是至少不共享的对象类型1 处房产。 这是一个抽象的例子。 我忘记了我遇到的确切例子,但有很多,因为tree.json自由扩展对象的方式(在某些情况下扩展链超过 5 个)并在任何时候自由地排除字段。 这让我觉得我之前使用&交叉路口类型的方法可能是最好的路线。 基本上,这将导致一些被“排除”的属性实际上并未出现在类型提示中(因为它们是从树中无法从当前节点省略的更高扩展的东西合并的),但我不能想一个更好的方法来做到这一点。 文档解决了这个问题,因为它们从一个点呈现属性,但从结构上讲,我们无法在不放弃extends并创建大量大部分重复的类型定义的情况下

有效符号修剪后有703个符号。 但在那之后,tree.json 中的输出符号大约是 100。很多都被忽略了。

你指的是什么修剪方法? 这是最难处理的部分......

是的,我还注意到tree.json中没有描述类/命名空间(这基本上是在描述我理解的声明性 init 选项),但是@cvasseng说它们是 vanilla jsdoc3所以希望我们可以使用标准转换器。

pruning从这一行引用的。

tree.json所有数据集合都位于publish方法中。

我认为其中可能存在一些对 jsdoc api 的滥用。

我们可以找到一种更好的方法来根据 jsdoc 的原始输出生成新版本的tree.json

今天,我花了一段时间找出tree.json代表什么。 然后我终于弄清楚tree.json只托管图表选项的类型。 请参阅此处https://api.highcharts.com/highcharts/。

类型收集和生成逻辑写在这里 - https://github.com/highcharts/highcharts/blob/master/tools/jsdoc/plugins/highcharts.jsdoc.js。

我们可能需要自己生成完整版本的类型并执行类似于https://github.com/englercj/tsd-jsdoc 的操作。

有没有这方面的预计到达时间? 绝对类型中的定义非常可怕。

您是否考虑过与 TypeScript 团队讨论您需要的缺失功能? 我相信他们会倾听像 Highcharts 这样规模的项目的需求,而且他们的发布周期相当快。

@aaronbeall你看过Mapped Types吗?

这是您示例的修复链接

@cvasseng @TorsteinHonsi

您是否考虑过与 TypeScript 团队讨论您需要的缺失功能?

@JannesMeyer不幸的是,没有ETA atm,我的项目肯定会重新开始大量使用Highcharts,但目前我正在做其他事情。 我实际上使用的是映射类型(和条件类型),这就是Omit<>用来区分事物的方式...... , 完整的、符合人体工程学的类型定义。 似乎定义应该是最低限度的定义(即不要在所有地方重新定义相似对象的相同属性),但不要遗漏任何东西。 在类型完成中显示一个选项,而 Highcharts 在给定的上下文中实际上并未使用该选项,而不是缺少应该存在的内容。 还有缺少 doc 模式的问题,导致通用objectany类型......有人必须写下类型,类型生成不能为你做。

是的,这是有道理的。 听起来 Highcharts 团队可能应该比目前更多地接受 TypeScript。 也许从类型定义生成文档而不是从 jsdoc 生成文档甚至是可行的?

@JannesMeyer #8307 正在生成完整类型的 Highcharts。 审查是必需的。 文档改进合并后,将发出另一个 PR 以根据 jsdoc 符号自动生成完整类型。

我一直在关注这篇文章,如果声明文件可用,那将非常有帮助。
我一直在为我们的 React/Typescript 项目使用 DefenitelyTyped。 但是,遇到了可访问性问题。 没有意识到可访问性部分不适用于 DefenitelyTyped。 我已经就我的问题联系了 Highcharts 支持团队,但还没有成功。
在我们的团队中,我们大量使用 Highcharts/Highmaps。 因此,我们对它进行了投资。 请考虑一下这个项目的优先级。

提前致谢!

我只是想通知,这个问题已成为高度优先事项。

Highcharts 团队( @sophiebremer@oysteinmoseng )实际上和我一起参加了一个调试会议,并通过直接加载 Js 文件帮助我解决了这个问题。 我真的很感谢他们提供的时间和解决方案在这一刻解除对我的阻止。 期待以 Highcharts 为终极解决方案的 TS 声明文件。 :)

感谢@sophiebremer优先考虑这一点。 这对于使用 Typescript 的项目非常有用。

注意:我编辑了评论以提供更好的上下文,同时感谢 Highcharts 团队的人员。

我们在一个使用 angular / typescript 的大型前端团队中大量使用 Highstock。 拥有打字稿定义对我们来说太棒了,我们认为来自绝对类型的定义是参考,但它对于 Highstock 来说已经完全过时了。

这个打字稿定义对我们来说真的是一个很大的需求!
欢迎任何预计到达时间:)

我们现在致力于提高质量并尝试减少 Highcharts 选项树中生成的界面的数量。 在此之后,我们将开始公测阶段。

我们的 ETA 目前是 Beta 版的 2018 年第三季度。

@sophiebremer这是个好消息! 您有 DTS 生成器还是使用现有的转换工具?

我们使用自定义的。 我们在下面使用 dts-dom 尝试了这个拉取请求https://github.com/highcharts/highcharts/pull/8307 的方法,但这并没有很好地工作。

有这方面的消息吗? 似乎@types/highcharts不再更新。

我们仍在以高度优先的方式致力于此。 不幸的是,我现在无法发布声明的预览。 还有一些类型,需要整合,或者需要引入。 “highcharts.d.ts”将是一个包含超过 200.000 行声明和注释的巨大文件。

@sophiebremer您如何生成该文件? 手动?

@scott-ho
虽然声明文件是自动生成的,但修复和更新源代码中的 doclet 是一个手动过程。

嗨,大家好! 我在我的个人存储库中发布了 Highcharts 声明的预览。 您可以通过npm i https://github.com/sophiebremer/highcharts-declarations-alpha.git或从https://github.com/sophiebremer/highcharts-declarations-alpha/blob/master/highcharts.d.ts下载声明并将其直接放入./node_modules/highcharts/ 。 如果声明对您有用或您有问题,请告诉我们。 谢谢!

已知的问题:

  • options.series 属性中的类型固定不起作用。 现在的解决方法是将对象转换为您的系列类型,如{ data: [0, 1, 2]} as Highcharts.SeriesLineOptions
  • CSSObject 类型的样式选项并非无处不在

像选择这样的 ChartEventsOptions 函数似乎没有接受事件函数参数

我发现的其他几个问题

  • 无法导入导出、离线导出模块。 我不得不更改 export = factory 以导出默认工厂并将其用作默认导入

  • 缺少注释模块

  • PlotSeriesEventsOptions click 需要修改为 click?: (e:PointerEventObject) => boolean;

感谢您的反馈, @muperi
关于你的第二篇文章的一些评论:

  • 常规模块没有默认导出。 请检查您的 tsconfig 以获取 ES6 设置。
  • 只有少数模块有声明。 我们当然会在接下来的几个月里增加更多。
  • 我们将研究这个问题。

像选择这样的 ChartEventsOptions 函数似乎没有接受事件函数参数

Fix 是 highcharts/highcharts#9110 的一部分,将包含在https://github.com/highcharts/highcharts-declarations-beta 的下一次更新中

请将声明文件的更多问题添加到此存储库: https :

谢谢你。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

KacperMadej picture KacperMadej  ·  3评论

KacperMadej picture KacperMadej  ·  3评论

ananth-imagin picture ananth-imagin  ·  3评论

sebastianbochan picture sebastianbochan  ·  3评论

balupton picture balupton  ·  3评论