jQuery的承诺和打字稿

时间:2018-07-11 06:33:40

标签: jquery typescript promise

从其他开发人员那里获得了项目,他们已经正确地进行了编译,我在“ return deferred.promise()”行的打字稿中有一个错误。

类型'JQueryPromise <{}>'不能分配给类型'JQueryPromise'。

def TestCase = testRunner.getTestCase()
def CurrentTestStep = 
context.testCase.getTestStepAt(context.getCurrentStepIndex()).getLabel()
def StepList = TestCase.getTestStepList().name - CurrentTestStep
def ResponseTime = 0
def RequestSize = 0
def ResponseSize = 0

  StepList.each
  {
  Step ->
  try
  {
     log.info "Size of " + Step  + "is " +  testRunner.testCase.testSteps[Step].testRequest.response.responseSize 

  ResponseSize=    ResponseSize + testRunner.testCase.testSteps[Step].testRequest.response.responseSize 

 }
  catch(Exception e)
  {
  }
}

testRunner.testCase.setPropertyValue("Test_Case_Response_Size", ResponseSize.toString())

有很多这样的错误,所以我认为问题不在代码中,而是在某些配置中,怎么回事?

2 个答案:

答案 0 :(得分:2)

似乎您只需要将正确的类型传递给Deferred工厂。这段代码编译:

export function promise<T>(resolver: (resolve: (data: T) => void, reject: (error: any) => void) => void): JQueryPromise<T> {
    const deferred = $.Deferred<T>(); // here we used generic type for Deferred
    resolver(
        data => {
            deferred.resolve(data);
        },
        ex => {
            deferred.reject(ex);
        }
    );
    return deferred.promise();
}

尽管如此,我不确定此问题是否正在干扰.NET细节。

答案 1 :(得分:0)

对于不使用泛型的代码,我有几乎相同的错误消息,但不是

类型'JQueryPromise <{}>'不能分配给类型'JQueryPromise'

类型'JQueryPromise <{}>'不可分配给类型'IAccountSettings'。

其中IAccountSettings显然是我的类型,或者在这种情况下是接口。在上述Cerberus的出色回答的基础上,我通过仅输入以下特定类型来更改了deferd的声明:

public get(): JQueryPromise<IAccountSettings> {
var deferred = $.Deferred<IAccountSettings>();