**TypeScript Version:** 2.7.0 <!-- Search terms you tried before logging this (so others can find this issue more easily) --> **Search Terms:** **Code** ```ts declare const $input: HTMLInputElement // Property 'value' does not exist on type 'EventTarget' $input.onchange = e => { console.log(e.target.value) } ``` **Expected behavior:** The `e.target` be inferred as `HTMLInputElement` instead of `EventTarget`. The HTMLInputElement could be signatured as below or other proposals: ``` interface HTMLElement<E> extends Element { onchange: (this: E, ev: Event) => any; } interface HTMLInputElement extends HTMLElement<HTMLInputElement> { } ``` **Actual behavior:** Error `Property 'value' does not exist on type 'EventTarget'` **Playground Link:** [Playground](http://www.typescriptlang.org/play/index.html#src=declare%20const%20%24input%3A%20HTMLInputElement%0D%0A%0D%0A%24input.onchange%20%3D%20e%20%3D%3E%20%7B%20console.log(e.target.value)%20%7D)