我正在尝试学习如何使用 angular 和 typescript,我一直在关注一个视频,直到他试图创建一个方法(getBookId),该方法应该获取书籍 ID,然后签入一个数组并返回它的有相同 ID 的图书时的信息。
答案 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。
<块引用>find(predicate: (value: T, index: number, obj: T[]) => 未知, thisArg?: any): T |未定义;
在您的情况下 T = Book,因此 find() 将返回类型 Book 或未定义的对象,但您的 getBookId() 方法返回 Book。因此,如果 find() 方法返回未定义的打字稿将无法将其转换为 Book,这就是错误实际传达的内容。
如何修复错误:
非空断言运算符
返回 this.books.find(book => book.id == id)!
更新调用函数的返回类型
getBook(id: number): Book |未定义
类型转换到预订
返回 this.books.find(book => book.id == id) 作为 Book
关闭strictNullChecks(不推荐) 不建议这样做,因为它会导致难以跟踪问题。 在 strictNullChecks
阅读更多相关信息