【发布时间】:2021-10-22 15:42:00
【问题描述】:
我有一个项目,我使用 JSDoc 来注释类型和 typescript 定义文件以更舒适地创建这些类型。 我将一些通用类型从 JSDoc 移植到 typescript,因为它更容易编写。 我发现我不能将泛型类型直接分配给变量,因为它说我必须提供类型参数。所以,如果我尝试这样做:
/*
* @type {import('./api').WithDb}
*/
const withDb = handler => async args => {
它失败了,因为 WithDb 需要两个参数,但这正是我想要的,说这是一个通用函数。
JSDoc 允许您使用@template 语法定义泛型类型,因此我可以像这样重新注释函数:
/*
* @template T
* @template K
* @type {import('./api').WithDb<T,K>}
*/
const withDb = handler => async args => {
或
/*
* @template T,K
* @type {import('./api').WithDb<T,K>}
*/
const withDb = handler => async args => {
但这是我想避免的很多样板。除了@type 以外的类型绑定还有其他方法吗?
【问题讨论】:
-
这能回答你的问题吗? TypeScript how to create a generic type alias for a generic function? 您应该将
WithDb定义为泛型函数,而不是泛型类型(export type WithDb = <T, K>(params) => ReturnType而不是export type WithDb<T, K> = (params) => ReturnType) -
这在 JSDoc 方面工作得很好,所以在这方面,这太棒了。但是,我不能再将该类型用作任何定义文件的泛型,因为它不再是泛型。
标签: typescript jsdoc