【发布时间】:2018-12-23 21:14:47
【问题描述】:
我有一个看起来像这样的重载函数:
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;
它有 2 个参数,其中一个有一个默认参数。所以我只需要提供 1 个参数。但是,当我尝试按如下方式使用此功能时:
const userId = getUserId(request);
我收到以下错误:
Expected 2 arguments, but got 1.
这是预期的吗?还是一个错误?我将如何解决这个问题?
另外,我意识到我可以禁用 strictNullChecks 并且不需要重载,但我想继续使用它。
【问题讨论】: