【问题标题】:Angular 11 Type undefined is not assignable to type 'T'Angular 11类型未定义不可分配给类型'T'
【发布时间】:2021-04-29 14:10:53
【问题描述】:

我正在尝试按原样将此 google 动态表单用于 Angular 11,但出现错误。

这是逐字复制的所有代码,显然它可以在这里工作,但在我的开发机器上给了我错误。 https://stackblitz.com/edit/angular-sccsnu?file=src%2Fapp%2Fquestion-base.ts

√ 编译成功。

Error: src/app/_models/question-base.ts:21:5 - error TS2322: Type 'T | undefined' is not assignable to type 'T'.
  'T' could be instantiated with an arbitrary type which could be unrelated to 'T | undefined'.
    Type 'undefined' is not assignable to type 'T'.
      'T' could be instantiated with an arbitrary type which could be unrelated to 'undefined'.

21     this.value = options.value;
       ~~~~~~~~~~

【问题讨论】:

标签: angular typescript


【解决方案1】:

考虑options的类型

   options: {
      value?: T;
  }

所以options.value 将是T | undefined 类型,因为? 意味着值是可选的

现在是this.value的类型

  value: T;

所以this.value 将是T 类型

现在假设我们没有为 options.value 提供任何值,那么我们将分配 this.value = undefined 理想情况下应该警告我们,因为 this.value 的类型是 T

简而言之,解决方案是要么删除可选参数?,要么更改this.value的类型

value: T | undefined

【讨论】:

  • 删除 ?给了我一个不同的错误:value: T 类型“{}”中缺少属性“值”,但类型“{值:T;键?:字符串 |不明确的;标签?:字符串 |不明确的;需要吗?:布尔值 |不明确的;订单?:号码 |不明确的;控制类型?:字符串 |不明确的;类型?:字符串 |不明确的;选项?: { ...; }[] |不明确的; }'.` 留下它并添加T | undefined 给了我与我的问题相同的错误:Type 'T | undefined' 不可分配给类型 'T'。 'T' 可以用与 'T | 无关的任意类型实例化。未定义'。
【解决方案2】:

添加! to 'this.value = options.value!;' 应该修复它,因为'!' 运算符指示此值不可为空。

【讨论】:

  • 哈哈哈,我喜欢javascript
【解决方案3】:

您可以摆脱“类型'T | undefined'不可分配给类型'T'”的所有错误 通过将 tsconfig.json 文件中的属性 "strict" 设置为 false

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 2021-02-28
    • 2022-11-11
    • 2022-11-11
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2022-01-07
    相关资源
    最近更新 更多