我有两个文件
src/a.js
src/b.js
。我希望response
的类型是request
函数的返回值。
如果用 Typescript 我可以写这个⬇️。jsdoc 中有类似的语法吗?
我不想使用
来定义附加类型。@typedef
// src/a.ts
export function request() {
return Promise.resolve({
name: "William",
});
}
// src/b.ts
import { request } from "./a";
export function handleResponse(response: ReturnType<typeof request>) {}
src/a.js
export function request() {
return Promise.resolve({
name: "William",
});
}
src/b.js
/**
* @param {???} response
* @returns {void}
*/
export function handleResponse(response) {}
要在 JSDoc 中获得类似的效果而不使用 @typedef,您可以在 JSDoc 注释中使用 import() 语法来引用另一个模块中的类型。
在您的示例中,如果您想使用
src/a.js
中的请求函数的返回类型作为src/b.js
中handleResponse函数中的响应参数,您可以执行以下操作
src/a.js
/**
* @returns {Promise<{name: string}>}
*/
export function request() {
return Promise.resolve({
name: "William",
});
}
src/b.js
import { request } from './a';
/**
* @param {ReturnType<typeof import('./a').request>} response
* @returns {void}
*/
export function handleResponse(response) {}
在 JSDoc 注释中使用 import() 允许您引用其他模块的类型。
语法
ReturnType<typeof import('./a').request>
本质上翻译为“./a模块中请求函数的返回类型”。
如果需要更多帮助,请评论。