Typescript: тип TextNode - PullRequest
       39

Typescript: тип TextNode

1 голос
/ 24 апреля 2019

Если вы напишите ниже код:

const e = document.body.firstChild;
if (e.nodeType === Node.TEXT_NODE)
    console.log(e.data);

Вы получите эту ошибку на e.data:

TS2339: свойство 'data' не существует для типа 'ChildNode'.

Хотя если условие истинно (e.nodeType === Node.TEXT_NODE), то e имеет некоторые другие свойства в дополнение к обычным ChildNode свойствам, таким как data и wholeText.


К какому типу я должен привести (кроме any)?

1 Ответ

1 голос
/ 19 мая 2019

Я думаю, что вы должны написать свое условие, основанное на nodeName, поэтому оно будет возвращать "#text" для текстовых узлов.

nodeName Пример для MDN

Интерфейс, который вы ищете в TypeScript: CharacterData или просто Text. В интерфейсе Text у вас будут свойства data и wholeText, так как он реализует characterData интерфейс.В абстрактном интерфейсе characterData у вас есть только data проп.

Символьные данные (MDN)

Текст (MDN)

...