JavaScript-программисты обычно используют их как взаимозаменяемые, хотя между ними и есть тонкое семантическое различие, достойное упоминания: undefined означает, что нечто еще не было определено, а null показывает отсутствие значения (как если бы вы пытались вычислить значение, но сталкивались при этом с ошибкой). Это всего лишь условности, и TypeScript вас не принуждает к их соблюдению, однако будет полезным понимать разницу.
Если два типа не родственны, утвердите any (вспомните из подраздела «Совместимость» на с. 154, что any совместим с чем угодно), а после встаньте в угол и поразмышляйте, что вы наделали
Хоть TypeScript и не поддерживает их по умолчанию, мы можем симулировать их с помощью функции маркировки типов.