我想知道我是否可以在 TypeScript 中使用条件类型?

目前我有以下界面:

interface ValidationResult {
  isValid: boolean;
  errorText?: string;
}

但我想删除 errorText ,并且只有当 isValidfalse 作为 属性需要 0x24134119 时才有它

我希望我能够将其编写为以下界面:
interface ValidationResult {
  isValid: true;
}

interface ValidationResult {
  isValid: false;
  errorText: string;
}

但如你所知,这是不可能的。那么,您对这种情况有何看法?

最佳答案

对这种逻辑建模的一种方法是使用联合类型,像这样

interface Valid {
  isValid: true
}

interface Invalid {
  isValid: false
  errorText: string
}

type ValidationResult = Valid | Invalid

const validate = (n: number): ValidationResult => {
  return n === 4 ? { isValid: true } : { isValid: false, errorText: "num is not 4" }
}

然后编译器能够根据 bool 标志缩小类型
const getErrorTextIfPresent = (r: ValidationResult): string | null => {
  return r.isValid ? null : r.errorText
}

关于javascript - TypeScript 中的条件类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59172416/

10-13 05:41