【问题标题】: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&lt;unknown&gt;,所以不能保证你会得到一个Book。请给minimal reproducible example作为文本
  • @jonrsharpe 我刚刚用 booksServices.getSingleBook 的代码编辑了这个问题
  • 作为截图。代码是文本,就这样发布。但是,是的,该函数缺少任何关于它可能返回的承诺 of 的信息。

标签: angular typescript promise


【解决方案1】:

有一个difference between any and unknown

简而言之,您不能像在代码中那样将unknown 视为anything 或Book。 如果您的方法返回Promise&lt;any&gt;Promise&lt;Book&gt;,您将能够执行您在此处尝试的操作。

我会选择后者并像这样注释 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&lt;Book&gt;unknown 仍然不能分配给Booktypescriptlang.org/play?#code/…
猜你喜欢
  • 2021-04-18
  • 2022-06-16
  • 2022-07-20
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
相关资源
最近更新 更多