随着 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()
的选项和系列都作为我们使用它的模式本身之外的特殊情况处理,但我们应该至少将global
和lang
更改为在主要选项结构之外。
作为旁注,旧的转储格式可在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
还有一个空白键。
我今天在这方面取得了一些进展,您可以在此处查看
Highcharts.Options
和Series
类的重要内容,以及非常具体的小对象,如PlotOptionsBbTopLine
。 为避免名称冲突,它将全名转换为 PascalCase,例如plotOptions.bb.topLine
。 仍在努力弄清楚如何使它变得更好。 试图与当前的@types/highcharts
进行比较有点困难,通常那里不存在的东西。highstock
和highmaps
......&
交叉类型合并对象,因为extends
引发了很多关于不兼容扩展的错误。 目前没有处理excludes
,我开始使用Omit
类型,但这引发了很多关于类型中不存在的省略字段的错误。 我认为这是因为在某些情况下,对象属性间接从父对象继承,所以它实际上没有应该省略的字段,父对象的属性有。 plotOptions.mfi.params
就是一个例子,它不包括index
但它没有index
属性或extends
一个有的对象,但是父plotOptions.mfi
扩展了plotOptions.sma
,它有一个子plotOptions.sma.params
属性,该属性具有index
,它与plotOptions.mfi.params
合并在父级上。 是啊,还在纠结怎么处理。 :) 似乎我需要评估完全合并的树并从那里计算出类型......Array
、 Object
和Function
类型......可能都在描述中有详细记录,但似乎没有在类型中表达。 也许对类型数据进行一些明智的修补会解决这个问题。 我最喜欢的是Array.<Array.<Mixed>>
- 不知道那是什么。 :)其他一些具体的事情:
Color
、 CSSObject
和Mixed
类型是什么? Color
似乎是格式化的string
, CSSObject
是标准样式对象,还是特殊的东西?series.bellcurve.data
和series.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
的文字类型(该信息非常棒!)。 无论如何,丢失的类型转储已更新。
在思考树如何扩展对象后取得了一些进展:
object
、 array
和function
类的模糊类型的问题。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 离开了这个项目,但我现在又回来了,很快就会回到这个项目中。
从我上一篇文章开始,我沿着将type
为interface
并使用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 模式的问题,导致通用object
或any
类型......有人必须写下类型,类型生成不能为你做。
是的,这是有道理的。 听起来 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/
。 如果声明对您有用或您有问题,请告诉我们。 谢谢!
已知的问题:
{ data: [0, 1, 2]} as Highcharts.SeriesLineOptions
像选择这样的 ChartEventsOptions 函数似乎没有接受事件函数参数
我发现的其他几个问题
无法导入导出、离线导出模块。 我不得不更改 export = factory 以导出默认工厂并将其用作默认导入
缺少注释模块
PlotSeriesEventsOptions click 需要修改为 click?: (e:PointerEventObject) => boolean;
感谢您的反馈, @muperi !
关于你的第二篇文章的一些评论:
像选择这样的 ChartEventsOptions 函数似乎没有接受事件函数参数
Fix 是 highcharts/highcharts#9110 的一部分,将包含在https://github.com/highcharts/highcharts-declarations-beta 的下一次更新中
请将声明文件的更多问题添加到此存储库: https :
谢谢你。
最有用的评论
我只是想通知,这个问题已成为高度优先事项。