需要訪問在$resource
(例如,remove,query ...)上使用某種默認操作返回的對象的$promise
屬性。但現在看來,這是不可能在目前的打字稿定義爲$resource
:
例子:
我有一個學生資源:
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
作爲return trype inste廣告IResource<IStudentDataModel>
(但它返回具有$ promise屬性的資源,不僅是數據模型)。
我試圖重寫remove方法在IStudentResource
:
interface IStudentResource extends IResourceClass<IStudentDataModel> {
deactivate(params: Object): IResource<IStudentDataModel>
remove(params: Object): IResource<IStudentDataModel>
}
但是編譯器說:
接口 'IStudentResource' 不正確擴展接口 'IResourceClass'。財產'刪除'的類型是 不兼容。 類型'(data:Object)=> IResource'不可分配爲鍵入'IResourceMethod'。