Angular 11 未定义类型不可分配给类型“T”

时间:2021-01-25 18:30:06

标签: angular typescript

我正在尝试将这个谷歌动态表单用于 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;
       ~~~~~~~~~~

3 个答案:

答案 0 :(得分:4)

添加!改为'this.value = options.value!;' 应该修复它,因为'!' 操作符表示这个值不可为空。

答案 1 :(得分: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

答案 2 :(得分:1)

您可以摆脱“Type 'T | undefined' is notassignable to type 'T'”的所有错误 通过将 tsconfig.json 文件中的属性 "strict" 设置为 false