【发布时间】:2020-11-07 17:54:40
【问题描述】:
我正在编写一个中间件辅助函数,它返回一个包含 3 个元素的数组:
- 是
Server或IncomingMessage - 是
ServerResponse或 null - 总是
Function
辅助函数是这样的:
function getCallbackParts(args) {
return [
args[0],
args.length === 3 ? args[1] : null,
args.length === 3 ? args[2] : args[1]
];
}
所以,稍后在代码中,我会这样做:
function MyMiddleware() {
const [request, response, next] = getCallbackParts(arguments);
request.transportType = request.hasOwnProperty('rooms') ? 'socket.io' : 'http';
next();
}
我执行代码没有问题,但我需要记录 getCallbackParts 返回的结果,所以我的 IDE(我使用 WebStorm)会自动将 request 视为 Server 或 IncomingMessage。
我试过这个(变体 1,产生相同结果的合并变体):
/**
* @return [Server|IncomingMessage, ServerResponse|null, Function]
* @return [(Server|IncomingMessage), (ServerResponse|null), Function]
* @return {[Server|IncomingMessage, ServerResponse|null, Function]}
* @return {[(Server|IncomingMessage), (ServerResponse|null), Function]}
*/
但是这样我的 IDE 显示 request 可以是 Server、IncomingMessage、ServerResponse、null 或 Function。 response 和 next 也是如此。
我也试过这个(变体 2,合并了两个产生相同结果的变体):
/**
* @return {Array<(Server|IncomingMessage), (ServerResponse|null), Function>}
* @return {Array.<(Server|IncomingMessage), (ServerResponse|null), Function>}
*/
这样,request 被正确检测到,但response 和next 也由于某种原因继承了Server|IncomingMessage 类型。
这种情况下如何编写正确的jsDoc返回类型?
【问题讨论】:
标签: javascript webstorm jsdoc