如何解决对象可能是TypeScript中的'null'.ts(2531)错误?

时间:2019-10-23 19:33:08

标签: typescript null isnull

我见过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');
}

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

1 个答案:

答案 0 :(得分: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 );
}