TypeScript JSDoc 风格的类型是不是具有常规类型的全部功能?
Posted
技术标签:
【中文标题】TypeScript JSDoc 风格的类型是不是具有常规类型的全部功能?【英文标题】:Does TypeScript JSDoc-style typing have full power of regular types?TypeScript JSDoc 风格的类型是否具有常规类型的全部功能? 【发布时间】:2019-01-21 18:21:55 【问题描述】:TypeScript 据说是 "turing complete"。 JSDoc 风格的类型是否与常规类型一样功能齐全?能不能做映射类型、条件类型、keyof等,以及所有常规类型的事情?
只是好奇,因为我想为 JS 文件声明类型,这些文件实现了类工厂 mixins,并定义了接受对象并返回从对象定义生成的类的定义函数。生成的类应该具有受保护的和私有的成员,并且混合应该返回具有受保护/私有成员的类。
我想键入这些内容而不必转换为.ts
文件,只需保持 JS 代码不变即可。
是否可以使用 JSDoc cmets 键入诸如从对象字面量定义和类工厂 mixins 生成的类等元内容?
【问题讨论】:
这似乎混淆了两个不同的概念。图灵完备并不意味着第二段中描述的表现力,反之亦然。您是在问 TS 中的 JS Doc 是否可以表达所有与常规类型声明/注释相同的概念,或者它是否是一个图灵完备的系统? @RyanCavanaugh 我在问前者,TS 中的 JSDoc 是否可以表达所有与常规类型声明/注释相同的概念。可以吗? 【参考方案1】:并非所有可以在 TypeScript 中表达的类型都可以在 JSDoc 中表示。示例:
/**
* @typedef Parameters
* A tuple of the types of the parameters of a function.
* @template T
* @type (T extends (...args: infer U) => * ? U : never)
*/
尝试使用此类型会导致 TypeScript 服务认为 Paramaters<T> = any
。这意味着不支持条件类型。
一般而言,您可以通过编写类型并查看服务是否放弃并只是说它是any
来确定JSDoc是否支持。
【讨论】:
好吧,我想我会求助于.d.ts
文件来描述我的.js
文件。最好在一个 .js
文件中完成所有操作!以上是关于TypeScript JSDoc 风格的类型是不是具有常规类型的全部功能?的主要内容,如果未能解决你的问题,请参考以下文章
VS Code 中的 Vue Array Prop JSDoc TypeScript 错误:“ArrayConstructor”类型缺少“MyCustomType []”类型中的以下属性
第1639期如何使用 JSDoc 保证你的 Javascript 类型安全性
[TypeScript] Type check JavaScript files using JSDoc and Typescript 2.5