もうまんまこれが答えだった。
undefined
も文字列として"undefined"
してしまうと。なんかas
に近い。
なんか近いなと思ったのが、
document.querySelector('.title') as HTMLElement;
document.querySelector<HTMLElement>('.title');
の違いに似ているような。前者は問答無用でnullもHTMLElementにしてしまうけど、後者はちゃんとnullならnullを返し、見つかればHTMLElementとして返してくれる。