TypeScriptの推論は型を超えている。
このコードを見ていただきたい。
window.addEventListener('keydown', e => {
// eはKeyboardEventに自動推論される
});
コールバックで返るeの値を決定するのは、第1引数の文字列である。
メソッド定義を見ると以下のようになっている。
addEventListener(type: "keydown", listener: (ev: KeyboardEvent) => any, useCapture?: boolean): void;
addEventListener(type: string, listener: EventListener, useCapture?: boolean): void;
文字列によって、コールバックの型を決定しているのがわかる。
このような定義ができるのは文字列だけのようで、数値やenumで定義しようとするとエラーとなる。