类型 'Book' 不可分配给类型 'Book'

时间:2021-07-03 15:42:16

标签: angular typescript visual-studio-code

我正在尝试学习如何使用 angular 和 typescript,我一直在关注一个视频,直到他试图创建一个方法(getBookId),该方法应该获取书籍 ID,然后签入一个数组并返回它的有相同 ID 的图书时的信息。

this is the repository.model.ts with method thats causing the error it says: Type 'Book | undefined' is not assignable to type 'Book'. Type 'undefined' is not assignable to type 'Book'

2 个答案:

答案 0 :(得分:2)

返回类型应该是 Book | undefined,因为如果没有找到匹配的书籍,find 方法可以返回 undefined。

Documentation 供参考。

getBookId(id: Number): Book | undefined {
  return this.books.find(book => book.id === id);
}

答案 1 :(得分:-1)

由于您只说明了打字稿错误而不是您的问题是什么,我假设您想知道为什么会收到此错误并想要修复它。

Type 'Book | undefined' is not assignable to type 'Book'.
  Type 'undefined' is not assignable to type 'Book'

错误来自 Array.prototype.find() 方法。来自MDN

<块引用>

find() 方法返回第一个元素的值 提供的数组满足提供的测试功能。如果不 值满足测试函数,返回 undefined。

来自,lib.es2015.core.d.ts

<块引用>

find(predicate: (value: T, index: number, obj: T[]) => 未知, thisArg?: any): T |未定义;

在您的情况下 T = Book,因此 find() 将返回类型 Book 或未定义的对象,但您的 getBookId() 方法返回 Book。因此,如果 find() 方法返回未定义的打字稿将无法将其转换为 Book,这就是错误实际传达的内容。

如何修复错误:

  1. 非空断言运算符

    返回 this.books.find(book => book.id == id)!

  2. 更新调用函数的返回类型

    getBook(id: number): Book |未定义

  3. 类型转换到预订

    返回 this.books.find(book => book.id == id) 作为 Book

  4. 关闭strictNullChecks(不推荐) 不建议这样做,因为它会导致难以跟踪问题。 在 strictNullChecks

    阅读更多相关信息