打字稿:TextNode的类型

Mir*_*ili 8 dom textnode dom-node typescript child-nodes

如果你写下面的代码:

const e = document.body.firstChild;
if (e.nodeType === Node.TEXT_NODE)
    console.log(e.data);
Run Code Online (Sandbox Code Playgroud)

您将在以下位置收到此错误e.data

TS2339:“ChildNode”类型上不存在属性“data”。

而如果条件为真 ( e.nodeType === Node.TEXT_NODE) 则e除了常规ChildNode属性之外还有一些其他属性,例如datawholeText


我应该转换为什么类型(除了any)?

web*_*eur 5

我认为你应该根据 编写你的条件nodeName,因此它将为文本节点返回“#text”。

\n\n

MDN 上的节点名称示例

\n\n

您在 TypeScript 中寻找的接口是CharacterData或简称TextText接口上,您将同时拥有datawholeText属性,因为它实现了该characterData接口。在characterData抽象接口上你只有dataprop。

\n\n

字符\xe2\x80\x8b数据 (MDN)

\n\n

文本(MDN)

\n

  • 但我没有根据`tagName`编写条件。我是根据`nodeType`写的。不管怎样,你回答了我的问题。谢谢。 (3认同)