我需要访问$promise
上的某个默认操作返回的对象的$resource
属性(例如,删除,查询...)。但在$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
中的删除方法:
interface IStudentResource extends IResourceClass<IStudentDataModel> {
deactivate(params: Object): IResource<IStudentDataModel>
remove(params: Object): IResource<IStudentDataModel>
}
但是编译器说:
接口'IStudentResource'错误地扩展了接口 'IResourceClass'。财产'删除'的类型是 不相容。 输入'(data:Object)=&gt; IResource'不能分配给'IResourceMethod'类型。
答案 0 :(得分:0)
它有点粗糙,但您可以使用类型断言任何,以使类型检查停止抱怨。
return (<any>this.StudentResource.deactivate({ studnetId: studentId})).$promise;
此外,由于打字稿接口是开放式的,您还可以修改IResource接口以添加 $ promise 属性。
interface IResourceClass<T> {
$promise: IPromise<T>
}