【发布时间】:2016-08-03 08:54:09
【问题描述】:
我需要访问在$resource 上使用一些默认操作返回的对象的$promise 属性(例如删除、查询...)。但在 $resource 的当前 TypeScript 定义中似乎是不可能的:
例子:
我有一个学生资源:
interface IStudentDataModel {
name: string
age: number
}
interface IStudentResource extends IResourceClass<IStudentDataModel> {
deactivate(params: Object): IResource<IStudentDataModel>
}
export default function ($resource: IResourceService, CONFIG: IConfig): IStudentResource {
"ngInject"
let deactivateAction: IActionDescriptor = {
url: `${CONFIG.api_host}/students/:studentId/deactivate`,
method: 'PUT'
}
return <IStudentResource>$resource(
`${CONFIG.api_host}/students/:studentId`,
}
studentId: '@studentId'
},
{
deactivate: deactivateAction,
});
}
然后我在另一个服务中使用这个资源:
export default class StudentActions {
constructor(
private StudentResource: IStudentResource,
) {
"ngInject"
}
deactivate(studentId: number): IPromise<any> {
return this.StudentResource.deactivate({ studnetId: studentId}).$promise;
}
remove(studentId: number): IPromise<any> {
return this.StudentResource.remove({ studentId: studentId}).$promise; //!!!
}
}
问题:我无法访问this.StudentResource.remove({ studentId: studentId}).$promise,因为默认操作将IStudentDataModel 作为返回trype 而不是IResource<IStudentDataModel>(但它返回具有$promise 属性的资源,而不仅仅是数据模型)。
我试图覆盖IStudentResource中的remove方法:
interface IStudentResource extends IResourceClass<IStudentDataModel> {
deactivate(params: Object): IResource<IStudentDataModel>
remove(params: Object): IResource<IStudentDataModel>
}
但是编译器说:
接口“IStudentResource”错误地扩展了接口 “资源类”。属性“删除”的类型是 不相容。 类型“(数据:对象)=> IResource”不可分配给类型“IResourceMethod”。
【问题讨论】:
标签: angularjs typescript angular-resource