我有一个看起来像这样的重载函数
app.post('/delete-user', (req, res)=> {
users.splice(users.indexOf({ username: req.body.username, password:req.body.password}, 1))
res.send(users)
})
它带有2个参数,其中一个具有默认参数。因此,我只需要提供1个参数即可。但是,当我尝试如下使用此功能时:
function getUserId(request: ContextParameters, requireAuth: true): string;
function getUserId(request: ContextParameters, requireAuth: false): string | undefined;
function getUserId(request: ContextParameters, requireAuth = true): string | undefined {
const authHeader = request.request.headers.authorization;
if (authHeader) {
const token = authHeader.replace('Bearer ', '');
const payload = jwt.verify(token, 'THISISTHENODESECRET') as TokenPayload;
return payload.userId;
}
if (requireAuth)
throw new Error('Authentication required');
}
export default getUserId;
我收到以下错误:
const userId = getUserId(request);
这是预期的吗?还是一个错误?以及如何解决这个问题?
此外,我意识到我可以禁用Expected 2 arguments, but got 1.
并且不需要重载,但是我想继续保持下去。
答案 0 :(得分:0)
拆分过载:
requireAuth
。考虑以下示例:
function foo(flag: true): true;
function foo(flag: false): false;
function foo(): false
function foo(flag = false): boolean {
if (flag) {
return true;
}
return false;
}
用法:
foo(true) // true
foo(false) // false
foo() // false
生成的JavaScript正是您所期望的:
"use strict";
function foo(flag = false) {
if (flag) {
return true;
}
return false;
}