2017-07-05 1 views
0

J'ai la configuration de test suivant, mais le transpiler me donne l'erreur suivante:Comment résoudre TS2349 dans un modèle de test protractor

Error:(108, 9) TS2349:Cannot invoke an expression whose type lacks a call signature. Type '((opt_callback?: (value: Model1[]) => R | IThenable, opt_errback?: (error: any...' has no compatible call signatures.

// classe l'action

export class SearchResultsActions { 
    // setup and other stuff 

    // Model1 and Model2 are both interfaces 
    getJSON(): promise.Promise<Array<Model1>> | promise.Promise<Array<Model2>> { 
     return option.getText().then((selected: string) => { 
      let searchType: "model1" | "model2" = "model1"; 
      if (selected === "Model 2") { 
       searchType = "model2"; 
      } 

      // getResultsEl returns an ElementArrayFinder 
      return ResultsPage.getResultsEl().map((el, index) => { 
       let pageObject: Model1PageObject | Model2PageObject = SearchPage.getResult(searchType, index); 
       let actionObject: Model1Actions | Model2Actions; 

       if (searchType === "model1") { 
        actionObject = new Model1Actions(<Model1PageObject> pageObject); 
       } else { 
        actionObject = new Model2Actions(<Model2PageObject> pageObject) 
       } 

       // both Model1Actions and Model2Actions have a getJSON() method 
       return actionObject.getJSON(); // returns a JSON object 
      }); 
     }); 
    } 
} 

En la spécification de recherche où l'erreur est:

SearchResultsActions.getJSON() 
    .then((res: Array<Model1> | Array<Model2>) => { 
     // use lodash to perform equality 
     expect(_.isEqual(res, expected)).toBeTruthy(); 
    }); 

chose curieuse, malgré l'erreur, les travaux de transpile de toute façon et le test s passe. Mais je voudrais ne pas avoir l'erreur qui me frappe.

J'utilise tapuscrit 2.3.3, 5.1.2 protractor

Toute pensée? Partout où je peux clarifier?

+0

La réponse, que j'ajouterai en guise de réponse dès que possible, est de définir le type de retour de 'getJSON() à getJSON(): promise.Promise | Tableau > ' – Machtyn

Répondre

0

La réponse est de changer le type de retour à

promise.Promise<Array<Model1> | Array<Model2>> 

qui est différent de

promise.Promise<Array<Model1>> | promise.Promise<Array<Model2>> 

qui ne fonctionne pas.

Apparemment, cela est également vrai pour les observables.