首页 > 解决方案 > 如何解决 TypeScript 中 Object is possible is 'null'.ts(2531) 错误?

问题描述

我已经看到如何抑制“错误 TS2533:对象可能是‘空’或‘未定义’”?. 和其他东西。这不是重复的!

有 3 种不同的方法可以抑制此错误。我不想要什么。我也不想禁用严格的空类型。我想要一个适当的解决方案来正确编码。

HTMLElement我可以创建一个与null相同Element但没有 null 的新类型吗?如果它们实际上为空并且我只是抑制 TS 中的警告,那么在运行时会发生什么。这感觉就像一个可怕的解决方法。

function insertAfter( newNode: HTMLElement, referenceNode: Element ) : void {

    referenceNode.parentNode.insertBefore( newNode, referenceNode.nextSibling );
}

这是行不通的。TS linter 不够聪明,无法检测到这一点:

function insertAfter( newNode: HTMLElement, referenceNode: Element ) : void {

    if ( null === referenceNode ) {
        throw Error( 'ref node is null');
    }

    referenceNode.parentNode.insertBefore( newNode, referenceNode.nextSibling );
}

在这里找到这个:https ://rules.sonarsource.com/typescript/RSPEC-2966也不起作用。

function insertAfter( newNode: HTMLElement, referenceNode: Element ) : void {
    if ( referenceNode ) {
        referenceNode.parentNode.insertBefore( newNode, referenceNode.nextSibling );
    }

    throw Error( 'ref node is null');
}

我是 TypeScript 的新手,但这是最烦人的事情。我希望有一个我还没有找到的解决方案。

标签: typescriptnullisnull

解决方案


实际上.parentNode就像评论中的人指出的那样。但是 VScode 对此有问题,它显示了两个错误。

在此处输入图像描述

此解决方案有效:

function insertAfter( newNode: HTMLElement, refNode: Element ) : void {

    if ( null === refNode.parentNode ) {
        throw Error( 'refNode.parentNode is null');
    }

    refNode.parentNode.insertBefore( newNode, refNode.nextSibling );
}

推荐阅读