Как набрать ChildNode? Или использовать методы ChildNode с Typescript? - PullRequest
1 голос
/ 28 июня 2019

Я хочу использовать ChildNode методы. Если для ex. Я набираю это:

const node = window.getSelection().getRangeAt(0).startContainer;

if (this.isChildNode(node)) {
  this.node.replaceWith(...);
}

isChildNode(node: Node): node is ChildNode {
  return 'replaceWith' in node;
}

Выдает ошибку:

Тип предиката типа должен быть назначен типу его параметра. Тип «ChildNode» не может быть назначен типу «Node». Недвижимость 'baseURI' отсутствует в типе 'ChildNode'

Если я просто разыграю это:

const node = window.getSelection().getRangeAt(0).startContainer;
(node as ChildNode).replaceWith(...nodes)

Выдает ошибку:

Тип 'Node' не может быть преобразован в тип 'ChildNode'

Свойство «удалить» отсутствует в типе «Узел»

Только any компилирует приложение:

(node as any).replaceWith(...nodes)

Демонстрация Stackblitz

Что меня смущает, так это то, что Документы ChldNode в MDN утверждают, что ChildNode не наследует никаких свойств или методов. Так как же это extends Node в Typescript ...?

1 Ответ

0 голосов
/ 19 июля 2019

Почему никто не предложил разыграть после проверки типагардом? Это совершенно безопасно, и он компилируется ...

const node = window.getSelection().getRangeAt(0).startContainer;

if (this.isChildNode(node)) {
  (this.node as ChildNode).replaceWith(...nodes)
}

isChildNode(node: Node): node is ChildNode {
  return 'replaceWith' in node;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...