如何处理环绕对象可能是TypeScript中的'null'.ts(2531)错误?

问题描述 投票:0回答:1

我看过How to suppress "error TS2533: Object is possibly 'null' or 'undefined'"?。和其他东西。这是不是重复项!

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

是否可以创建一个与HTMLElementElement相同的新类型,但不包含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');
}

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

typescript null isnull
1个回答
0
投票

实际上是.parentNode,正如评论中的人指出的那样。但是VScode对此有很多错误,它显示了两个错误。

enter image description here

此解决方案有效:

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

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

    refNode.parentNode.insertBefore( newNode, refNode.nextSibling );
}
© www.soinside.com 2019 - 2024. All rights reserved.