Почему var name=null определяется как тип string?
Потому что объявляемая вами переменная name - глобальная, применительно к клиентскому javascript'у это означает, что она окажется свойством объекта window, у которого - сюрприз, сюрприз - свойство name уже есть, и, как нам тут подсказывают, его значения могут быть только строками:window.name will convert all values to their string representations by using the toString method.
Как написали выше, если объявлять через var, то вы изменяете в window.name. Чтобы такого не было, объявляйте через let
let
var
PS закладывайте себе, что переменная должна иметь только один тип. В дальнейшем это вам очень сильно поможет