2017-03-16 103 views
-1

我正在用Typescript开始我的旅程。所以,我有video标记在我的HTML和.ts文件这些行:Typescript“属性在类型元素上不存在”

... 
class KomakhaPlayer { 
    private container = ...; 
    private video: Element = this.container.getElementsByClassName('video')[ 0 ]; 
    private controls = ...; 

    constructor(){ 
    this.video.controls = false; // ts error 
    ... 
    } 
} 
... 

正如你可以看到this.video类型,但低于this.video.controls抛出我的打字稿错误住宅“控制”不存在于类型'元素'

临时,我改变Element类型any,但我想知道如何妥善解决这个错误并处理今后类似。提前致谢!

SOLUTION: 所以正确的方法是定义是这样的:

private video: HTMLVideoElement = <HTMLVideoElement>this.container.getElementsByClassName('video')[ 0 ]; 

说明通过下面@deceze在评论

+0

使用'this。控制“不?而不是'this.video.controls' – Smit

+2

'Element'是一个自定义类,或者它是你正在使用的库的一部分 – Gab

+1

@Smit,no''this.video.controls'',** controls ** is a视频标签的属性 – lomboboo

回答

1

Element是确实没有一个非常通用的根对象一个controls属性。见https://developer.mozilla.org/en-US/docs/Web/API/Element。您正在寻找的是HTMLVideoElement,它继承自HTMLMediaElement,它具有controls属性。

Typescript是完全正确的:你告诉它你正在使用Element,Typescript警告你Element不知道有controls

+0

谢谢,我的工作是这样的:''private video:HTMLVideoElement = this.container.getElementsByClassName('video')[0];''。但有一件事我不明白为什么我需要投射''''? Typescript不能确定这是视频类型吗? – lomboboo

+1

不,它不能。 'getElementsByClassName('video')'返回的元素只在运行时才知道,而不是在编译时。在编译时,最好的Typescript可以推断出它会是某种'Element'。 – deceze

相关问题