带有--strictNullCheck的打字稿-在单独的方法中检查不为空

Typescript with --strictNullCheck - check not null in separate method

我正在使用编译器 --strictNullCheck 选项

我有这个方法:

需要检查headers是否不为空,然后才能使用它们。太棒了

现在我想将检查操作移动到 单独的 方法,如下所示:

但不是我收到此错误:

所以没有办法在单独的方法中检查一些 object 或者它的一些 属性 是否不为空?

应该很简单:

if(err.headers != null) {
  return error.headers.get('content-type') || defaultContentType;
} else {
  return defaultContentType; // or whatever
}

您也可以将其放入 hasHeaders 代码中,但是,typescript 编译器可能仍会或可能不会抛出该警告。

有关检查空值的更多详细信息:

通过 'truthy' 值

检查值

您可以只检查该值是否为 "truthy",即它不是 nullundefined0false'' 通过将值用作布尔值,即 if (value) { /* do something */ }return value || defaultValuereturn value ? value : defaultValue,等等

通过这种方式你可以做这样的事情:

return error.headers ?
    (error.headers.get('content-type') || defaultContentType) : 
    defaultContentType /* or whatever */;

不过如果你的变量名很长的话会有点乱。

使用识别与相等性检查

有些人更喜欢使用===(和!==)(等式)而不是==(和!=)(等式),因为=== 是更严格的检查;但是,null == undefined 等于 true,而 null === undefined 等于 false,所以在正确的地方使用正确的!

使用类型保护。类型保护是一些表达式,它执行运行时检查以保证某些范围内的类型。

在你的情况下,这样的事情可能会起作用(很难判断,因为你粘贴的是图像而不是代码):

function hasHeaders(error: Response): error is Response & { headers: Headers} {
    return error.headers != null
}

您可以在 https://www.typescriptlang.org/docs/handbook/advanced-types.html

的打字手册中了解有关类型保护的更多信息