Как обойти Object, возможно, 'null'.ts (2531) ошибка в TypeScript? - PullRequest
0 голосов
/ 23 октября 2019

Я видел Как подавить "ошибку TS2533: объект может быть 'null' или 'undefined'"? . И другие вещи. Это , а не дубликат!

Есть три способа, чтобы подавить эту ошибку. Я не хочу что. Я также не хочу отключать строгие нулевые типы. Я хочу правильное решение для правильного кодирования.

Могу ли я создать новый тип, такой же как HTMLElement и Element, только без нуля? Что произойдет во время выполнения, если они фактически равны нулю, а я просто подавляю предупреждение в TS. Это похоже на ужасный обходной путь.

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

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

Это не работает. TS Линтер не достаточно умен, чтобы обнаружить это:

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 голосов
/ 23 октября 2019

Это было примерно .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 );
}
...