Typescript强制我从方法[closed]返回一个值

ujv3wf0j  于 7个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(65)

**已关闭。**此问题为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()
    }
  }

字符串
它说“函数缺少返回语句”。


的数据
但这个人能做到。



我也希望能够做到。

v64noz0r

v64noz0r1#

首先,让我们认识到这个问题:ts报告不是所有的代码流都将返回一些东西。如果isValid解析为true,实际上就会发生这种情况。在这种情况下,函数将隐式返回undefined。问题是:在调用handle函数时,您是否处理过这种情况?如果不处理,您的代码可能会中断。
你说“我也想这样做”,你可能会这样做(阅读下文),但首先,记住隐式处理未定义或空值不是最佳实践,会导致错误(在你的情况下,可能是cannot read properties of undefined错误)。
如何解决这个问题?你有两个选择:
1.(不推荐)在你的tsconfig.json中,禁用noImplicitReturns(参见TSConfig参考)。这样,ts将跳过这个错误。这不是推荐的方法,因为你只是忽略了一些可能导致代码在运行时失败的东西。我认为上一个截图中的那个家伙就是这样做的。
1.显式处理大小写,可能会在else语句中返回一些未定义的内容,或者更好的是null

handle (httpRequest: HttpRequest): HttpResponse | null {
...
}

字符串
这取决于您当前的tsconfig是否启用了strictNullChecks(但这超出了您的问题范围)。现在,您必须在调用handle函数后处理显式null返回值。这是推荐的方法,因为它确保不会跳过任何不幸的情况。
一般来说,要记住,Typescript的强大之处在于它的类型检查机制,因此降低其严重性可能有助于更快地实现某些功能,但是当您的代码意外中断时,您可能会在以后付出代价。
“这是什么意思?”
“如果我决定忽略它,会发生什么?”
在ts中,您会发现使用any类型是非常有诱惑力的,因为这个原因,但请尽量避免使用它。

相关问题