Typescript 无法推断函数中的未定义或空检查

pou*_*yan 2 typescript

当我使用函数时,我遇到 Typescript 类型检查问题。假设我有一个 TypeIBaseField和一个 Type 变量Array<IBaseField>。当我想为该变量分配一个值时,我将检查nullundefined根据函数结果分配一个空数组或一个新值。但是打字稿显示错误,当我在函数中检查它时,类型IBaseField[] | undefined 不可分配给类型。IBaseField[]这是我尝试过的代码:

  public constructor(formId:ID, autoFillFields?: Array<IBaseField>) {
    this._formId = formId
    this._autoFillFields = isNullOrUndefined(autoFillFields) ? [] : autoFillFields
  }
Run Code Online (Sandbox Code Playgroud)

这是我的isNullOrUndefined功能:

export function isNullOrUndefined(obj: any) {
  return obj === null || obj === undefined
}
Run Code Online (Sandbox Code Playgroud)

以及打字稿显示的错误:

输入 'IBaseField[] | undefined' 不可分配给类型'IBaseField[]'。类型“未定义”不可分配给类型“IBaseField[]”.ts(2322)

小智 5

你需要告诉 typescript 这isNullOrUndefined是一个类型保护:

export function isNullOrUndefined(obj: any): obj is null | undefined {
  return obj === null || obj === undefined
}
Run Code Online (Sandbox Code Playgroud)

https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards