【发布时间】:2016-03-11 07:35:37
【问题描述】:
我在尝试链接 ng.IPromise 函数调用时遇到此 ts 错误:
Error:(101, 23) TS2345: Argument of type 'IPromise<IResult[]>' is not assignable to parameter of type 'IResult[]'. Property 'length' is missing in type 'IPromise<IResult[]>'.
代码:
public search(stateParams : any, page : any) : ng.IPromise<Array<app.search.entities.IResult>> {
// create promise
let deferred : ng.IDeferred<Array<app.search.entities.IResult>> = this.$q.defer();
// ensure page is a number
page = (isNaN(page)) ? 1 : parseInt(page, 10);
// create query
this.searchServiceSearchQuery.getQuery(
stateParams,
this._itemsPerPage,
(page * this._itemsPerPage) - this._itemsPerPage,
null
).then(
(query : any) : void => {
// search
deferred.resolve(this._search(query)); // <= THIS "this" THROWS THE ERROR ABOVE
}
);
// return promise
return deferred.promise;
}
private _search(query : any) : ng.IPromise<Array<app.search.entities.IResult>> {
// create deferred
let deferred : ng.IDeferred<Array<app.search.entities.IResult>> = this.$q.defer();
// run query
this.coreServiceRestangularHelpmeSearch
.one('search')
.get({q : query})
.then(
(data : any) : void => {
// found results
if (
data !== null &&
'results' in data === true
) {
// create entities
let entities : Array<app.search.entities.IResult> = [];
// walk through all results
data.results.forEach((result : any) : void => {
// create entity
let entity : app.search.entities.IResult = new app.search.entities.Result(
result.id,
result.cat1Ids[0],
result.cat2Ids[0],
result.cat3Ids[0],
result.typeCode,
(result.sort) ? parseInt(result.sort, 10) : null,
result.title,
result.description,
this.$sce.trustAsHtml(result.summary),
false
);
entities.push(entity);
});
// sort all by sort key
entities.sort(
(
a : app.search.entities.IResult,
b : app.search.entities.IResult
) : number => {
if (a.getSortKey() > b.getSortKey()) {
return 1;
} else if (a.getSortKey() < b.getSortKey()) {
return -1;
}
return 1;
}
);
deferred.resolve(this._extendResults(entities));
}
// return empty object
deferred.reject('invalid api response');
},
() : any => {
deferred.reject('failed to fetch search results');
}
)
;
我做错了什么还是 def 类型的文件有问题?如果我将_search() 函数的泛型更改为any,一切看起来都很好。
【问题讨论】:
-
您的示例很长,示例的第 101 行有一个空行。我想这就是为什么没有人关注你的问题。只需在代码中标记错误发生的位置即可。
标签: javascript angularjs typescript typescript1.5