Давайте рассмотрим Opt
из пакета ts-opt (это просто вариант «Может быть / Вариант / Необязательно») и isNumber
иметь охранник типа ((x): x is number => ...
).
Можно ли реализовать (и как) метод someIf
универсальным способом (работая с защитой произвольного типа, типобезопасный, без необходимости указывать пользователю тип, который уже находится в защите типа):
type A = number | string;
const x: A = 4;
const y: A = 'y';
opt(x) // Opt<number | string>
.someIf(isNumber); // Opt<number> (Some(4))
opt(y) // Opt<number | string>
.someIf(isNumber); // Opt<number> (None)