下記のようなコードで、イベントハンドラの引数の部分のイベントオブジェクトについてエラーになります。
エラーの意味としては親のEvent型のtargetがnullの可能性があるのに子のHTMLTextAreaElementのtargetは間違いなくTextAreaなので互換性がないということだと思うのですが、この要な場合、どう対処するのがいいでしょうか?NonNullableとかでEvent型からnullを除去するということも考えてみたのですが、解決できず、そもそもそんなムリなことしなくてもいいような気がして質問しました
TypeScript
1interface UIElement { 2 addClickListener(onclick: (this: void, e: Event) => void): void; 3} 4interface HTMLElementEvent<T extends HTMLElement> extends Event { 5 target: T; 6} 7let uiElement:UIElement = { 8 addClickListener: (onclick) =>{ 9 document.addEventListener('click',onclick); 10 } 11} 12class Handler { 13 info: string | null; 14 constructor() { this.info = ''; } 15 onClickGood = (e: HTMLElementEvent<HTMLTextAreaElement>) => { this.info = e.target.textContent} 16} 17let h = new Handler(); 18uiElement.addClickListener(h.onClickGood); // Error
Error
1Argument of type '(e: HTMLElementEvent<HTMLTextAreaElement>) => void' is not assignable to parameter of type '(this: void, e: Event) => void'. 2 Types of parameters 'e' and 'e' are incompatible. 3 Type 'Event' is not assignable to type 'HTMLElementEvent<HTMLTextAreaElement>'. 4 Types of property 'target' are incompatible. 5 Type 'EventTarget | null' is not assignable to type 'HTMLTextAreaElement'. 6 Type 'null' is not assignable to type 'HTMLTextAreaElement'.(2345)
あなたの回答
tips
プレビュー