У меня есть следующий код Typescript:
type Nothing = undefined | null;
export const isNothing = <T>(val: T | Nothing): val is Nothing =>
val === null || typeof val === 'undefined';
isNothing
- это защита типа, которая в основном проверяет, установлено или нет значение.
Мне бы хотелось для обнаружения следующего перед выполнением:
const foo:number = 42;
if(isNothing(foo)) { /* ... */ }
Дело в том, что защита типа является избыточной. Поскольку foo
явно введено, это не может быть null
или undefined
.
Я пытался найти ответы в следующих строках:
- Перегрузка
isNothing
для возврата типа never
, если val
не является типом объединения - Некоторое правило линтера, которое помечает, когда параметр функции, которая принимает объединение, не является объединением (это похоже на подход кувалдой).
- Некоторое правило линтера, которое явно обнаруживает ненужные средства защиты типов
В этом случае «обнаружение» будет либо ошибкой времени компиляции, либо уведомлением линтера. Важно отметить, что это будет обнаружение перед выполнением.