Javascript typescript:angular.d.ts用ng.IPromise防御性地键入

Javascript typescript:angular.d.ts用ng.IPromise防御性地键入,javascript,angularjs,typescript,typescript1.5,Javascript,Angularjs,Typescript,Typescript1.5,在尝试链接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[]>'. 错误:(101,23)TS2345:类型为“IPromise”的

在尝试链接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[]>'.
错误:(101,23)TS2345:类型为“IPromise”的参数不能分配给类型为“IResult[]”的参数。类型“IPromise”中缺少属性“length”。
代码:

公共搜索(stateparms:any,page:any):ng.IPromise{
//创造承诺
let deferred:ng.IDeferred=this.$q.deferred();
//确保页面是一个数字
页面=(isNaN(第页))?1:parseInt(第10页);
//创建查询
this.searchServiceSearchQuery.getQuery(
状态参数,
这个._itemsPerPage,
(第*页此._项目页面)-此._项目页面,
无效的
).那么(
(查询:任意):void=>{
//搜寻
延迟。解析(此._搜索(查询));//{
//发现结果
如果(
数据!==null&&
数据中的“结果”==true
) {
//创建实体
let实体:数组=[];
//浏览所有结果
data.results.forEach((结果:any):void=>{
//创建实体
让实体:app.search.entities.IResult=新建app.search.entities.Result(
result.id,
结果.cat1Ids[0],
结果.cat2Ids[0],
结果.cat3Ids[0],
result.typeCode,
(result.sort)?parseInt(result.sort,10):null,
结果.title,
结果说明,
这是$sce.trustAsHtml(结果摘要),
假的
);
实体。推送(实体);
});
//按排序键对所有文件进行排序
实体排序(
(
a:app.search.entities.IResult,
b:app.search.entities.IResult
):编号=>{
如果(a.getSortKey()>b.getSortKey()){
返回1;
}else if(a.getSortKey(){
deferred.reject('无法获取搜索结果');
}
)

在解析方法中,您应该传递以下类型的变量:

Array<app.search.entities.IResult>
而不是

deferred.resolve(this._search(query));

它将被编译,但我不知道您的代码逻辑,请自行调整。

您的示例很长,示例的第101行有一个空行。我想这就是为什么没有人调查您的问题。只需标记代码中出现错误的位置。
this._search(query).then((data)=>{
     deferred.resolve(data);
});
deferred.resolve(this._search(query));