2016-09-10 28 views
2

戻り値をdocument.getElementByIdからHTMLInputElementに変換するには、どのようにしてフローを取得できますか?もっと一般的なものではありません。HTMLElementフロータイプ:親クラスを返す関数から拡張クラスを使用

例:https://github.com/facebook/flow/blob/master/lib/dom.js

declare class Document extends Node { 
    … 
    getElementById(elementId: string): HTMLElement; 
    … 
} 

から

let input = document.getElementById('myinput'); 
console.log(input.value); 


script.js:28 
28: console.log(input.value); 
         ^^^^^ property `value`. Property not found in 
28: console.log(input.value); 
        ^^^^^ HTMLElement 

しかし、getElementById(この場合HTMLInputElementに)

declare class HTMLInputElement extends HTMLElement { 
    … 
    value: string; 
    … 
} 

のサブクラスを返すことができる私ができるようにしたいと思い入力エレメのvalueプロパティにアクセスする流れがなくてもエラーは発生しません。

+0

あなたの質問を詳しく説明できますか? –

答えて

2

問題は、フロー・コンパイラは、事前にどの変数のHTMLElement inputが実行されているのかわからないため、エラーをスローします。

通常、これは、人々がこのような場合に行うことが示唆されているものです。

var input = document.getElementById('myinput'); 

if (input instanceof HTMLInputElement) { 
    console.log(input.value); 
} 

読むドキュメントのdynamic type testsセクションでは、この技術について。

関連する問題