Promise 回调参数类型不可分配给 '(value: unknown) => void | PromiseLike<void>'
Posted
技术标签:
【中文标题】Promise 回调参数类型不可分配给 \'(value: unknown) => void | PromiseLike<void>\'【英文标题】:Promise callback parameter type not assignable to '(value: unknown) => void | PromiseLike<void>'Promise 回调参数类型不可分配给 '(value: unknown) => void | PromiseLike<void>' 【发布时间】:2021-09-06 02:16:53 【问题描述】:Typescript 不喜欢我的then
回调的参数类型:
Argument of type '(value: T) => void' is not assignable to parameter of
type '(value: unknown) => void | PromiseLike<void>'.
Types of parameters 'T' and 'value' are incompatible.
Type 'unknown' is not assignable to type 'T'.
【问题讨论】:
显然this.booksServices.getSingleBook
(你没有显示)返回一个Promise<unknown>
,所以不能保证你会得到一个Book
。请给minimal reproducible example作为文本。
@jonrsharpe 我刚刚用 booksServices.getSingleBook 的代码编辑了这个问题
作为截图。代码是文本,就这样发布。但是,是的,该函数缺少任何关于它可能返回的承诺 of 的信息。
【参考方案1】:
有一个difference between any
and unknown
。
简而言之,您不能像在代码中那样将unknown
视为any
thing 或Book
。
如果您的方法返回Promise<any>
或Promise<Book>
,您将能够执行您在此处尝试的操作。
我会选择后者并像这样注释 getSingleBook 方法:
getSingleBook(id: number): Promise<Book>
//...
const potentialBook = data.val();
const book: Book = validateBook(potentialBook); // throw an error if not a book
resolve(book);
//...
如果您 100% 确定它是并且将永远是,那么您可以将解析的值断言为一本书,但这是不建议的:
getSingleBook(id: number): Promise<Book>
//...
resolve(book as Book);
//...
谢谢jonrsharpe。
【讨论】:
这只是解决了问题,因为根本问题是getSingleBook
不 返回Promise<Book>
和unknown
仍然不能分配给Book
:typescriptlang.org/play?#code/…以上是关于Promise 回调参数类型不可分配给 '(value: unknown) => void | PromiseLike<void>'的主要内容,如果未能解决你的问题,请参考以下文章
promise + redux + redux-thunk:打字稿错误“不可分配给类型'Promise<any>”
“header:Header;”类型的参数不可分配给“RequestOptionsArgs”类型的参数
构建:'string | 类型的参数1' 不可分配给“字符串”类型的参数