TypeScript JSDoc样式键入是否具有常规类型的全部功能?

时间:2018-08-14 20:15:00

标签: typescript types

TypeScript被称为"turing complete"。 JSDoc样式键入功能是否像常规类型一样完整?我们可以做映射类型,条件类型,keyof等以及常规类型的所有事情吗?

很好奇,因为我想为实现类工厂混合的JS文件声明类型,并定义定义函数来接受对象并返回从对象定义生成的类。生成的类应具有受保护的成员和私有成员,并且mixins应返回具有受保护的/私有成员的类。

我想键入这些内容而不必转换为.ts文件,只需保持JS代码不变即可。

使用JSDoc注释是否可以键入诸如从对象文字定义和类工厂mixin等生成的类之类的元数据?

1 个答案:

答案 0 :(得分:0)

并非所有可以在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。这意味着不支持条件类型。

通常,您可以通过编写JSDoc并查看服务是否放弃并仅声明其为any来确定JSDoc是否支持该类型。