2016-08-03 8 views
0

返されたオブジェクトの$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, 
    }); 

} 

私は別のサービスでこのリソースを使用しています:私は学生のリソースを持っている

しかし、 $resourceの現在の活字体の定義は不可能であると思われます
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; //!!!   
    } 
} 

問題:デフォルトアクションの戻り値がIStudentDataModelであるため、this.StudentResource.remove({ studentId: studentId}).$promiseにアクセスできません。trype inste広告はIResource<IStudentDataModel>です(ただし、データモデルだけでなく、$ promiseプロパティを持つリソースを返します)。

私はIStudentResourceでremoveメソッドをオーバーライドするために試してみた:

interface IStudentResource extends IResourceClass<IStudentDataModel> { 
    deactivate(params: Object): IResource<IStudentDataModel> 
    remove(params: Object): IResource<IStudentDataModel> 
} 

しかし、コンパイラは言う:

インターフェース 'IStudentResource' 誤っインタフェース を拡張して 'IResourceClass'。プロパティ 'remove'のタイプは と互換性がありません。 タイプ '(data:Object)=> IResource'はタイプ 'IResourceMethod'に割り当てられません。

答えて

0

それは少しの粗だが、あなたはcomplaning停止型チェックを行うために、任意のに型アサーションを使用することができます。

また
return (<any>this.StudentResource.deactivate({ studnetId: studentId})).$promise; 

typescriptですインタフェースが開いているので、あなたはまた、$が財産を約束追加するIResourceインターフェイスを修正することができました。

interface IResourceClass<T> { 
    $promise: IPromise<T> 
} 
関連する問題