Союз продемонстрував помилками , як я рекомендую її обробки. Проте, Машинопис дійсно є щось , відоме як « умовні типи » , і вони можуть впоратися з цим.
type ValidationResult<IsValid extends boolean = boolean> = (IsValid extends true
? { isValid: IsValid; }
: { isValid: IsValid; errorText: string; }
);
declare const validation: ValidationResult;
if (!validation.isValid) {
validation.errorText;
}
Це ValidationResult(що насправді ValidationResult<boolean>обумовлено параметром за замовчуванням) еквівалентно об'єднанню, яке виробляється у відповіді про помилки або у відповіді CertainPerformance , і може використовуватися таким же чином.
Перевага тут полягає в тому, що ви також можете обходити відоме ValidationResult<false>значення, і тоді вам не доведеться тестувати, isValidяк це було б відомо, falseі errorStringбуло б відомо, що існує. Напевно, це не потрібно для подібного випадку - а умовні типи можуть бути складними та важкими для налагодження, тому їх, ймовірно, не слід використовувати без потреби. Але ви могли, і це, здавалося, варто згадати.
isValidцеfalse?