打字稿 - 如何解决“类型'未定义'不能分配给类型'XXXX'”?

时间:2020-12-19 03:07:19

标签: angular typescript undefined

我定义了一些属性的接口。尝试访问该服务时,我收到此错误 - 在 this.isOpen 的显示文件中无法分配类型“未定义”。我需要帮助来解决这个错误。

注意 - 我无法在配置文件中设置值,例如 "strictNullChecks":false

界面

export interface DataFile {
  file?: DataFile[];
  location: string;
}

打字稿类


  isOpen?: DataFile;

  Scan(aero: string, TeamClass: string) {
    if (TeamClass === 'Hawkins') {
      if (this.redService.name.file && this.redService.name.file.length > 0) {
        this.isOpen = this.redService.name.file.filter((data: DataFile) => data.location == aero[0])[0];
      }
    }
    
    this.displayfile(this.isOpen).then(async () => {  ----->>>>>> Error at this.isOpen
            //rest of the functionality
        }
      }
    });
  }

我遇到错误-

 Argument of type 'DataFile | undefined' is not assignable to parameter of type
'DataFile'.
  Type 'undefined' is not assignable to type 'DataFile'.

1 个答案:

答案 0 :(得分:0)

通过用问号设置 isOpen,它会选择两种类型:一种是 DataFile(您的类型)和 undefined。这就是 Typescript 报告错误的主要原因。

要解决它,您有两个选择:

  • 检查 isOpen 是否填充了数据,即:
if (!isOpen) { /* do something */ }
...rest of code
  • isOpen 前面加上 !(即 this.isOpen!),这样就可以强制类型不被定义。不推荐使用,因为如果它确实未定义,您会在 this.displayfile 函数中遇到错误。

此处有关问号运算符的参考:https://www.geeksforgeeks.org/why-use-question-mark-in-typescript-variable/