如何描述返回数组的函数由 3 个不同类型的元素组成
How to describe a function returning an array consists of 3 elements of different types
我正在编写一个中间件辅助函数,它 return 是一个包含 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
return 结果,所以我的 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 return 类型?
尝试用括号分组。
/**
* @return {[(Server|IncomingMessage), (ServerResponse|null), Function]}
*/
这样解决的:
/**
* @return {{0: Server|IncomingMessage, 1: ServerResponse|null, 2: Function}}
*/
我正在编写一个中间件辅助函数,它 return 是一个包含 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
return 结果,所以我的 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 return 类型?
尝试用括号分组。
/**
* @return {[(Server|IncomingMessage), (ServerResponse|null), Function]}
*/
这样解决的:
/**
* @return {{0: Server|IncomingMessage, 1: ServerResponse|null, 2: Function}}
*/