如何避免打字稿错误:属性'innerHTML'在'Element'类型上不存在

时间:2016-02-07 11:26:01

标签: typescript

我正在尝试在特定div中放置一些HTML。当我在打字稿中尝试此操作时,我收到此错误:Property 'innerHTML' does not exist on type 'Element'。基本上,这是代码:

document.body.innerHTML = '<div id="myDiv"><div>'

let myContainer = document.querySelector("#myDiv");
myContainer.innerHTML = '<h1>Test</h1>';

令人惊讶的是,当打字稿编译时它仍然有效,但我想知道打字稿是否给我一个错误,在这种情况下,分配innerHTML的正确方法是什么?

7 个答案:

答案 0 :(得分:49)

使用类型断言来安抚编译器:

let myContainer = <HTMLElement> document.querySelector("#myDiv");
myContainer.innerHTML = '<h1>Test</h1>';

答案 1 :(得分:10)

在未来的TypeScript版本中,不需要进行转换。我发送了拉取请求来解决问题:

答案 2 :(得分:3)

我有同样的问题,通过声明为:

解决了这个问题
myString = 'hello world';

var el: HTMLElement = document.getElementById('id_of_element');
el.innerHTML = myString;

答案 3 :(得分:2)

修改DOM元素的唯一类型安全的方法是验证它们首先存在。 TypeScript很聪明,可以告诉您document.querySelector在文档中找不到目标时可以返回null

document.body.innerHTML = '<div id="myDiv"><div>'

let myContainer: HTMLDivElement | null = document.querySelector("#myDiv");

if (myContainer instanceof HTMLDivElement) {
    myContainer.innerHTML = '<h1>Test</h1>';
}

以上代码在TypeScript 3.2.1中正确编译。

答案 4 :(得分:1)

Use like this (<HTMLElement>document.querySelector("#myDiv")).innerHTML

答案 5 :(得分:1)

  1. 让myContainer = document.querySelector(“#myDiv”)作为HTMLElement;

  2. 让myContainer = document.querySelector(“#myDiv”);

  3. 让myContainer:HTMLElement = document.querySelector(“#myDiv”);

像这样解析您的元素,您应该可以在其中插入任何想要的内容。

答案 6 :(得分:0)

  const onChange = (e: React.SyntheticEvent ) => {\\e: React.SyntheticEvent - if you use ReactJS
    setActive((e.target as HTMLElement).innerHTML); \\innerHTML works fine instead of getInnerHTML() in TypeScript
  };