キャンバス要素の正しい型を見つけようとしています。 私は何をしても動作しません。私はすべての可能なHTML要素型を試しましたが、フローは互換性がないと言います。だから私canvas要素をHTMLCanvasElement変数に割り当てるのはなぜですか?Canvas要素のタイプが正しくありません
アイデア?
nodeパラメータは、canvas要素を含むdiv要素です。本当にシンプルです。タイプを取り除くと、すべてが機能します。
export class Graph extends Component {
draw = (node: HTMLDivElement) => {
let canvas: HTMLCanvasElement = node.firstChild
if (canvas){
canvas.width = parseInt(getComputedStyle(node).getPropertyValue('width'))
canvas.height = parseInt(getComputedStyle(node).getPropertyValue('height'))
}
let chart = new Chart(canvas, {
type: this.props.type,
data: this.props.data
})
}
render =() => (
<div ref={this.draw} className='graph'>
<canvas />
</div>
)
}
私は、フローリンターからこれらのエラーを取得:
Node This type is incompatible with HTMLCanvasElement
null This type is incompatible with HTMLCanvasElement
undefined This type is incompatible with HTMLCanvasElement
おかげ
P.S.それはインフェルノです - 反応しません。したがって、refは関数であり、文字列ではありません。ちょうどこれを修正する人々を避けるために。
おかげで、あなたの提案のための非常に。しかし、私は 'any'の使用を避けます。それは型システムのポイントを打ち消すものです。私はこのように回避できることを知っています。どのようなタイプの変数にキャンバス要素を割り当てることができますか? –
この場合、 'any'を使ったどれくらいの露出が残りのタイプになるのかという点では、' node.firstChild'を 'any'にキャストして再コンパイルするだけで済むはずはありませんFlowの型キャスト制限を回避するための 'HTMLCanvasElement' –
より良いHTMLDivElement型を定義することは可能かもしれませんが、 'node.firstChild'の型を理解する一般的なものを定義するのは非常に難しいでしょう。 node.firstChildがHTMLCanvasElement –