4

我很喜欢编译器--strictNullCheck选项

我有这个方法:

在此处输入图像描述

在此处输入图像描述

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

现在我想将检查操作移至这样的单独方法:

在此处输入图像描述

但不是我收到此错误:

在此处输入图像描述

所以没有办法在单独的方法中检查某个对象或其某些属性是否不为空?

4

2 回答 2

3

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

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

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

您可以在https://www.typescriptlang.org/docs/handbook/advanced-types.html了解有关 typescript 手册中类型保护的更多信息

于 2017-07-29T17:01:32.703 回答
-1

它应该很简单:

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

你也可以把它放在你的hasHeaders代码中,但是,打字稿编译器可能会也可能不会抛出那个警告。

关于检查空值的更多细节:

通过它们的“真实”值检查值

您可以检查该值是否“真实”,即它不是null, undefined, 0, false,或者''使用该值作为布尔值,即if (value) { /* do something */ }or return value || defaultValueorreturn value ? value : defaultValue等​​。

通过这种方式,您可以执行以下操作:

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

尽管如果您的变量名很长,这可能会有点混乱。

使用识别与相等检查

有些人更喜欢使用===(and !==) (identity) 而不是==(and !=) (equality),因为这===是更严格的检查;然而,null == undefined等于真,而null === undefined等于假,所以在正确的地方使用正确的!

于 2017-07-29T16:38:55.343 回答