2017-03-16 102 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

相關問題