我想使用ChildNode
方法。如果是前我保护它:
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)
抛出错误:
类型“节点”不能转换为类型“ ChildNode”
类型“节点”中缺少属性“删除”
只有any
会编译应用程序:
(node as any).replaceWith(...nodes)
令我困惑的是,ChldNode docs in MDN指出ChildNode没有继承任何属性或方法。那么extends Node
在Typescript中如何...?
答案 0 :(得分:0)
为什么没有人建议在typeguard检查后进行投射?它完全可以安全地在那里进行编译...
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;
}