Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解决空ts类型检查的问题?_Javascript_Typescript_Types_Null - Fatal编程技术网

Javascript 如何解决空ts类型检查的问题?

Javascript 如何解决空ts类型检查的问题?,javascript,typescript,types,null,Javascript,Typescript,Types,Null,我有一个类的属性可以为null,在代码中我检查值是否为非null,是否为数组-将新值推送到它,但类型检查器仍然认为该值可以为null。有人能解释一下为什么以及如何修复它吗,谢谢 class BIT { head: BIT | null = this; private value: string; right: BIT | BIT[] | null = null; left: BIT | BIT[] | null = null; somefunction(node: BIT)

我有一个类的属性可以为null,在代码中我检查值是否为非null,是否为数组-将新值推送到它,但类型检查器仍然认为该值可以为null。有人能解释一下为什么以及如何修复它吗,谢谢

class BIT {
  head: BIT | null = this;
  private value: string;
  right: BIT | BIT[] | null = null;
  left: BIT | BIT[] | null = null;

  somefunction(node: BIT) {
    const haveLeft = this.left !== null;
    const leftIsBranch = haveLeft && this.left instanceof Array;

    if (haveLeft) {
      if (leftIsBranch) {
        this.left.push(node);
      }
    }
  }
}

UPD:如果我去掉了布尔变量haveLeft和leftIsBranch,并显式地将其添加到if语句->一切正常。到底发生了什么事?

注意下面的类型检查

console.log(typeof null);//对象
console.log(Array.isArray([]);//正确

也可以在TypeScript中指定
示例:null | BIT
而不是
示例:BIT

,默认情况下,所有类型都可以为null:

默认情况下,null和undefined是所有其他类型的子类型。这意味着您可以将null和undefined赋值给类似number的对象

但是,当使用
--stricnullchecks
标志时,null和undefined仅可分配给void及其各自的类型。这有助于避免许多常见错误。如果要传入字符串或null或undefined,可以使用union类型字符串| null | undefined。下面再次介绍有关联合类型的更多信息

[来自TS]

因此,除非您使用的是
--stricnullchecks
编译器标志,否则没有必要添加
|null

类型检查错误的原因可能是您正在检查
null
,而不是
undefined
——这是未初始化字段的默认值。松散相等(
!=
而不是
!=
)检查也有助于识别未定义的情况:

const haveLeft = this.left != null; // This also excludes `undefined`

看起来问题是关于类型脚本语法,而不是js中的检查类型。对不起,我误解了。您能粘贴类型检查错误吗?[ts](在我的语言中表示:可能,对象为空的错误)(属性)示例。左:示例[]空
const haveLeft = this.left != null; // This also excludes `undefined`