【问题标题】:Typescript error: Type 'undefined[]' is not assignable to type 'void'打字稿错误:类型'undefined []'不可分配给类型'void'
【发布时间】:2018-09-29 00:10:57
【问题描述】:

在我的 Angular 应用程序中,我有一个过滤器功能,可以跟踪用户输入的过滤器值,以及这些过滤器值当前是否启用/激活。我正在像这样初始化这些过滤器:

filters = { language: [], location: [], zipArray: [], firstName: [], lastName: [] };

我在这段代码中遇到了 Typescript 错误——特别是这一行:return this.filters.zipArray = [];

public onZipcodeEnabledChange(enabled): void {
    this.filters.zipArray = this.getZipcodeArray();
    if (!enabled || this.filters.zipArray && this.filters.zipArray[0] === ''){
        return this.filters.zipArray = [];
    }
}

我得到的 TypeScript 错误是:

类型 'undefined[]' 不能分配给类型 'void'。

我不明白这里的问题是什么?

【问题讨论】:

  • 您将onZipcodeEnabledChange 的返回类型设为void,但您返回的是一个空数组。设置zipArray 过滤器后,尝试在单独的行上写return;
  • void 表示它不返回任何内容,并且您有 2 个问题 1 您正在返回一个作业,另外两个如果您想解决,您正在返回一些东西:string[]

标签: javascript angular typescript


【解决方案1】:

您将onZipcodeEnabledChange 的返回类型声明为 void,这意味着该函数不会返回任何内容。而在 if 语句中,您将返回 return this.filters.zipArray = []; 的赋值结果,即 []。

解决方案 1

只需删除 return 关键字即可。

public onZipcodeEnabledChange(enabled): void {
    this.filters.zipArray = this.getZipcodeArray();
    if (!enabled || this.filters.zipArray && this.filters.zipArray[0] === ''){
       this.filters.zipArray = [];
    }
}

解决方案 2

如果要从该函数返回数组,则需要将 void 替换为 any[]

public onZipcodeEnabledChange(enabled): any[] {
    this.filters.zipArray = this.getZipcodeArray();
    if (!enabled || this.filters.zipArray && this.filters.zipArray[0] === ''){
       this.filters.zipArray = [];
       return this.filters.zipArray;
    }
}

【讨论】:

  • 如果您确实想返回,则必须将 void 更改为 : any[] 或 string[] 无论数组中的内容是什么类型
  • 太棒了。谢谢。将进行此更改。
  • @JoeWarner,当然,我更新了答案。谢谢:)
  • 哈哈,我正在输入我的答案,你也打败了我,xD 好东西
猜你喜欢
  • 2018-01-04
  • 2021-08-19
  • 2022-10-14
  • 2018-02-02
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多