2017-03-16 50 views
-1

私はTypescriptで旅を始めています。だから私は、これらの行私のHTML内と.tsファイルにvideoタグを持っている: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'と入力します。

一時正しくこのエラーを解決し、今後同様の処理方法を知っている私はanyElementタイプを変更しましたが、私はにしたいです。前もって感謝します!

SOLUTION: だから右のアプローチは次のように定義される:

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

説明コメントで以下@decezeによって

+0

これを使用します。コントロール 'いいえ? 'this.video.controls'の代わりに – Smit

+2

' Element'はカスタムクラスか、使用しているライブラリの一部です – Gab

+1

@Smit、 '' this.video.controls''、** controls **はビデオタグのプロパティ – lomboboo

答えて

1

Elementは確かに持っていない非常に一般的なルートオブジェクトでありますcontrols属性。 https://developer.mozilla.org/en-US/docs/Web/API/Elementを参照してください。あなたが探しているのは、です。これはHTMLMediaElementから継承され、controlsという属性を持っています。

活字体は完全に正しいです:あなたはElementで作業していることを告げ、そして活字体はElementcontrolsを有することが知られていないことを警告しています。

+0

ありがとう、私はそれをこのようにしています: ''非公開ビデオ:HTMLVideoElement = this.container.getElementsByClassName( 'video')[0]; ''。しかし、なぜ私が '' ''をキャストする必要があるのか​​理解できないのですか? Typescriptはこれがビデオタイプであると判断できませんか? – lomboboo

+1

できません。 'getElementsByClassName( 'video')によって返される要素は、コンパイル時ではなく、実行時にのみ認識されます。コンパイル時に、最良のTypescriptは、ある種の 'Element'になると推測できます。 – deceze

関連する問題