То, что вы хотите, чтобы машинопись знала, что вы рассмотрели каждый случай; это называется «проверка полноты», и она описана в документах TypeScript .
. В документах рекомендуется выбрать один из двух подходов:
Первый - это скомпилировать с --strictNullChecks
и убедитесь, что каждая функция, для которой требуется полная проверка, помечена явным типом возврата. На практике это не практично для большинства кодовых баз.
Второе - добавить небольшую функцию в библиотеку, которая называется assertNever
:
function assertNever(x: never): never {
throw new Error("Unexpected object: " + x);
}
Затем в своем коде используйте assertNever
, чтобы указать, что все возможные случаи должны были быть охвачено, например, так:
function plusOne(v: CellType): CellType {
if (typeof v === 'number') {
return v+1;
}
if (typeof v === 'string') {
return -1;
}
if (typeof v === 'boolean') {
return -1;
}
if (v instanceof Empty) { return 1; }
if (v instanceof MyError) { return v; }
return assertNever(v);
}
Это даст вам ошибку компиляции, если вы не охватили все возможные случаи к моменту достижения assertNever
.