TypeScript:错误TS2345:类型'JQueryXHR'的参数不能分配给'Promise <any>类型的参数

时间:2016-09-29 00:24:10

标签: jquery typescript promise observable

以下示例代码片段在教程中介绍了如何执行JQuery getJSON()调用,然后将JQueryXHR结果转换为Promise,然后将其转换为Observable。

/// <reference path="../typings/tsd.d.ts" />

import { Component } from '@angular/core';
import { Observable } from 'rxjs/Rx';

@Component({
    selector: 'my-app',
    template: `
        <input id="search" type="text" class="form-control">
    `
})
export class AppComponent {
  example(searchTerm: string) {
    let url: string =
      "https://api.spotify.com/v1/search?type=artist&q=" + searchTerm;
    let jqueryXhr: JQueryXHR = $.getJSON(url);
    let observable: Observable<any> = Observable.fromPromise(jqueryXhr);
  }
}

此示例在运行时工作,但tsc编译器抛出以下错误:

app/app.component.ts(28,61): error TS2345: Argument of type 'JQueryXHR' is not assignable to parameter of type 'Promise<any>'.
  Types of property 'then' are incompatible.

是否有一种干净的方法可以将JQueryXHR对象转换或转换为可转换为Observable的Promise或其他类型?

2 个答案:

答案 0 :(得分:2)

  

是否有一种简洁的方法可以将JQueryXHR对象转换或转换为Promise?

您正在寻找那样做的Promise.resolve

但是,如果只有类型更精确,那么您当前的代码应该已经有效。 abs(0 - 0) + abs(2 - 0)不应该要求>>> goal = [1, 2, 3, 8, 0, 4, 7, 6, 5] >>> sum(abs(b%3 - g%3) + abs(b//3 - g//3) for b, g in ((board.index(i), goal.index(i)) for i in range(1, 9))) 16 ,而只需要fromPromisePromise应该实现Thenable界面。

答案 1 :(得分:2)

回答(谢谢@Bergi):

log.setup(...your params...)