如何在量角器测试模型中解决TS2349

时间:2017-07-05 21:34:55

标签: protractor typescript-typings

我已经进行了以下测试设置,但是转换器给了我以下错误:

  

错误:(108,9)TS2349:无法调用类型缺少调用签名的表达式。输入'((opt_callback?:(值:Model1 [])=> R | IThenable,opt_errback?:(错误:任何......'没有兼容的呼叫签名。

//动作类

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
            });
        });
    }
}

在错误所在的搜索规范中:

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

奇怪的是,尽管有错误,但仍然可以进行转换并且测试通过。但是我想不要向我发出错误。

我使用的是typescript 2.3.3,量角器5.1.2

有什么想法?在哪里可以澄清一下?

1 个答案:

答案 0 :(得分:0)

答案是将返回类型更改为

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

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

哪个不起作用。

显然,对于Observable来说也是如此。