**已关闭。**此问题为not reproducible or was caused by typos。目前不接受回答。
这个问题是由错字或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
2天前关闭。
Improve this question的
我有这个功能
handle (httpRequest: HttpRequest): HttpResponse {
try {
const requiredFields = ['name', 'email', 'password', 'passwordConfirmation']
for (const field of requiredFields) {
if (!httpRequest.body[field]) {
return badRequest(new MissingParamError(field))
}
}
const isValid = this.emailValidator.isValid(httpRequest.body.email)
if (!isValid) {
return badRequest(new InvalidParamError('email'))
}
} catch (exception) {
return serverError()
}
}
字符串
它说“函数缺少返回语句”。
的数据
但这个人能做到。
的
我也希望能够做到。
1条答案
按热度按时间v64noz0r1#
首先,让我们认识到这个问题:ts报告不是所有的代码流都将返回一些东西。如果
isValid
解析为true
,实际上就会发生这种情况。在这种情况下,函数将隐式返回undefined
。问题是:在调用handle
函数时,您是否处理过这种情况?如果不处理,您的代码可能会中断。你说“我也想这样做”,你可能会这样做(阅读下文),但首先,记住隐式处理未定义或空值不是最佳实践,会导致错误(在你的情况下,可能是
cannot read properties of undefined
错误)。如何解决这个问题?你有两个选择:
1.(不推荐)在你的tsconfig.json中,禁用
noImplicitReturns
(参见TSConfig参考)。这样,ts将跳过这个错误。这不是推荐的方法,因为你只是忽略了一些可能导致代码在运行时失败的东西。我认为上一个截图中的那个家伙就是这样做的。1.显式处理大小写,可能会在else语句中返回一些未定义的内容,或者更好的是
null
。字符串
这取决于您当前的tsconfig是否启用了
strictNullChecks
(但这超出了您的问题范围)。现在,您必须在调用handle
函数后处理显式null
返回值。这是推荐的方法,因为它确保不会跳过任何不幸的情况。一般来说,要记住,Typescript的强大之处在于它的类型检查机制,因此降低其严重性可能有助于更快地实现某些功能,但是当您的代码意外中断时,您可能会在以后付出代价。
“这是什么意思?”
“如果我决定忽略它,会发生什么?”
在ts中,您会发现使用
any
类型是非常有诱惑力的,因为这个原因,但请尽量避免使用它。