'打'在类型' HTMLElement'中不存在和财产的价值'在类型' EventTarget'上不存在

时间:2017-05-21 17:45:28

标签: typescript jsx

不确定为什么这两个警告来自。 有什么想法摆脱打字稿中的那些警告信息吗? 感谢

错误TS2339:属性'播放'类型' HTMLElement'。

上不存在
    export function playAudio(e, audioId) {
        e.preventDefault()
        let audioPlayer: HTMLElement = document.getElementById(audioId)
        audioPlayer.play();
    }

(248,82):错误TS2339:属性'值'类型' EventTarget'。

上不存在
    <input type="checkbox" id="inputSchedule" name="inputCheckboxesSchedule"
           value={this.state.displayMode}
           onClick={e => this.toogleDisplaymode(e.target.value)}/>

4 个答案:

答案 0 :(得分:5)

在Angular 5中,您需要按如下方式进行投射:

let audioPlayer = <HTMLVideoElement> document.getElementById(audioId);

audioPlayer.play();  

答案 1 :(得分:4)

第一个警告表示play()实例上没有HTMLElement方法。这是有道理的,因为play()可能是您在自己的组件上定义的方法。

第二个警告表示value实例中没有EventTarget属性。有关EventTargets, see MDN

的详细信息

我不确定如何解决第一个问题,因为您需要获取对已创建的实例的访问权限。但对于第二个,你很可能只需要转换返回值。所以,你应该做这样的事情:

{e => this.toogleDisplaymode((e.target as HTMLInputElement).value)}

编辑:这可能会解决您的第一个问题。

我不确定,但可能是您尝试播放媒体元素,如果是这种情况,您需要将audioPlayer转换为正确的类型:

let audioPlayer: HTMLMediaElement = document.getElementById(audioId)

See MDN, again, for more information.

答案 2 :(得分:4)

帖子较晚但有助于其他用户,要解决第一个问题,您可以将audioPlayer变量的类型更改为HtmlVideoElement,如下所示

let audioPlayer: HTMLVideoElement = document.getElementById(audioId);  
audioPlayer.play();  

这肯定会解决问题

答案 3 :(得分:1)

在angular 7中,此代码有效:

let audioPlayer = <HTMLVideoElement>document.getElementById('video');
audioPlayer.muted = true;