Союз продемонстрировал ошибками , как я рекомендую ее обработки. Тем не менее, Машинопись делает что - то , известное как « условные типы » , и они могут справиться с этим.
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?