如果你写下面的代码:
const e = document.body.firstChild;
if (e.nodeType === Node.TEXT_NODE)
console.log(e.data);
您将在
e.data
上收到此错误消息:TS2339: Property 'data' does not exist on type 'ChildNode'.
而如果条件为真 (
e.nodeType === Node.TEXT_NODE
) 那么 e
除了常规的 ChildNode
之外,还有一些其他属性属性,例如 data
和 wholeText
.我应该转换成什么类型(
any
除外)?
最佳答案
我认为您应该根据 nodeName
编写您的条件,因此它将为文本节点返回“#text”。
nodeName Example on MDN
您在 TypeScript 中寻找的界面是 CharacterData
或者干脆Text
. 在 Text
界面你将拥有data
和 wholeText
属性,因为它实现了 characterData
界面。在 characterData
你只有 data
的抽象接口(interface)支柱。
CharacterData (MDN)
Text (MDN)
关于Typescript:TextNode 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821761/