JSDoc + IDE 与 TypeScript

JSDoc + IDE vs. TypeScript

前提

通过适当维护的 JSDoc,几乎任何现代 IDE 都可以识别类型不匹配(赋值、函数的 signatures/arguments)以及非强类型语言引入的许多其他问题。
除此之外,现代 JS 还具有可预测的变量范围、无提升行为、模块化、内置 类 支持以及许多其他功能。


问题

In which scenario may TypeScript serve developer needs better than JS+JSDoc?

注意事项:我说的是这样的情况,其中遗留 JS/browsers 的支持是强制性的,TS + Babel 可以将现代代码库转换为一些遗留 -友好的环境。

我觉得这样的比较有点奇怪。 JSDoc 是面向文档的,而 typescript 为 js 添加了可选的静态类型。这些工具确实有一些共同点,例如它们允许类型检查,但它们的目的不同。

虽然这是一个有趣的问题。我想鼓励就该主题进行讨论,因此我将根据我使用这些工具的经验来谈谈。

我对 jsdoc 的主要问题是以下部分至关重要:

properly maintained JSDoc

jsdoc 自动完成的有用性直接取决于 jsdoc 注释的工作量和质量。我发现在大项目中很难执行。复杂的 types/interfaces 也很难描述和维护,非常冗长。另一方面,ts 比 jsdoc 更简洁。

此外,ts 中的类型和接口首先是 class 公民,而不仅仅是为了文档目的而添加的。它们是源代码中的实体,可以导出供其他模块使用。在编译过程中(及之前)强制执行类型不匹配。还有像 generics or decorators 这样的机制,是 ts.

自带的

回到执行指南部分。使用 ESLint,您可以设置灵活的规则,允许您为您的类型微调 restrictions/styles/guidelines。你想要严格的静态类型吗?或者你想要宽大处理?
如果需要,您可以强制执行您的确切需求并连接到 ci/cd。在我看来,在从事大型项目时,这是一个很大的好处。

工具也是一个重要因素,jsdoc和ts都已经足够成熟,周围都有生态系统。虽然在这个时间点 jsdoc isn't an active project,而 ts 非常受欢迎并且周围有一个庞大的社区,其中有很多 activity.

所以这一切都取决于您的需求,如果您对 jsdoc 可以为您做的事情感到满意并且文档是您的主要关注点,那么 ts 不会为您做太多事情。

P.S。 Ts 和 jsdoc 并不相互排斥。你可以同时拥有两者,尽管你可能想切换到 TSDoc

之类的东西

Typescript、Closure等各种Js编译器正式支持使用JSDoc进行类型检查https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html

如果你想输入检查Js源代码,这是一个有效的选项。