Вы можете использовать подход assertNever
, чтобы убедиться, что все случаи обрабатываются (что, я думаю, вы хотите сделать). Проблема в том, что вам нужно объединить все возможности, а не использовать интерфейс. Typescript не может знать, какими будут все реализации интерфейса, так что ваш type-guard не сузит тип параметра.
Это будет работать так, как вы ожидаете:
function foo(arg: MyClass1 | MyClass2) {
if (arg instanceof MyClass1) {
} else if (arg instanceof MyClass2) {
} else {
assertNever(arg);
}
}