Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 财产';内容';不存在于类型';HTMLElement';打字_Javascript_Typescript - Fatal编程技术网

Javascript 财产';内容';不存在于类型';HTMLElement';打字

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

我尝试获取meta标记的内容时出错:

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”
。另外,我更喜欢扩展接口。您还可以发布提到id
mymetatag
的元素的html代码吗?如果有“官方”类型,您不应该使用自定义类型。搜索HTMLMetaElement。