Javascript 财产';内容';不存在于类型';HTMLElement';打字
我尝试获取meta标记的内容时出错:Javascript 财产';内容';不存在于类型';HTMLElement';打字,javascript,typescript,Javascript,Typescript,我尝试获取meta标记的内容时出错: document.getElementById('mymetatag').content 在Javascript中是可以工作的,但是typescript说 Property 'content' does not exist on type 'HTMLElement' 那么,如何扩展HtmleElement类型接口以支持内容属性呢?请尝试以下操作: (<HTMLMetaElement> document.getElementById("myme
document.getElementById('mymetatag').content
在Javascript中是可以工作的,但是typescript说
Property 'content' does not exist on type 'HTMLElement'
那么,如何扩展HtmleElement类型接口以支持内容属性呢?请尝试以下操作:
(<HTMLMetaElement> document.getElementById("mymetatag")).content;
(document.getElementById(“mymetatag”)).content;
document.getElementById()返回一个HTMLElement
。
但是您知道您的结果是一个元标记,它是HTMLMetaElement
的一种类型。
查看,您可以看到HTMLElement
是HTMLMetaElement
的祖先,因此您应该将元素向下转换为这种类型。可以使用两种不同的语法执行此操作:
const metaElement = document.getElementById("mymetatag") as HTMLMetaElement;
// Or the second version:
//const metaElement = <HTMLMetaElement>document.getElementById("mymetatag");
const metaContent = metaElement.content;
const metaElement=document.getElementById(“mymetatag”)作为HTMLMetaElement;
//或第二个版本:
//常量metaElement=document.getElementById(“mymetatag”);
常量metaContent=metaElement.content;
请参阅有关类型断言的详细信息。TypeScript不知道什么类型的元素具有此特定ID。它无法信任该元素,即使该元素一开始就存在 您需要引入另一项检查以验证您的假设:
const element: HTMLElement | null = document.getElementById('mymetatag');
if (element instanceof HTMLMetaElement) {
element.content;
}
更新
您还可以使用断言签名
function assert(condition: boolean, message: string): asserts condition {
if (!condition) {
throw new Error(message);
}
}
然后,您的解决方案变成:
const element: HTMLElement | null = document.getElementById('mymetatag');
assert(element instanceof HTMLMetaElement, "A <meta> element of id 'mymetatag' needs to exist in the DOM.");
element.content; // string
const元素:HTMLElement | null=document.getElementById('mymetatag');
assert(元素instanceof HTMLMetaElement,“DOM中需要存在id为'mymetatag'的元素”);
element.content;//一串
你能试试像(document.getElementById(“mymetatag”))这样的内容吗??这仅在元素为输入时有效。类型“HTMLInputElement”上不存在属性“content”
。另外,我更喜欢扩展接口。您还可以发布提到idmymetatag
的元素的html代码吗?如果有“官方”类型,您不应该使用自定义类型。搜索HTMLMetaElement。