Une interface définit un ensemble de méthodes sans leurs implémentations

La différence entre une classe abstraite et une interface est qu’une classe abstraite peut avoir des méthodes concrètes qui implémentent des fonctionnalités générales ou communes, elle sert donc à factoriser du code. Une interface quant à elle définit uniquement les méthodes à implémenter, elle permet de définir un contrat : chaque classe implémentant l’interface sera tenue d’implémenter les méthodes de l’interface.

On la défini comme ca :

// on peut voir ici qu'une interface peut etendre une autre interface
export interface BaseViewInterface extends BaseInterface, DataControllerInterface {
    beanId : BeanId;
    subscriptions : Array<Subscription>;
    libellesDivers : LibellesDivers;
    libelleDiversSubject : BehaviorSubject<LibellesDivers>;
    libelleEcran : string;
    forms : any;
    breadCrumbState: string;
    doInit() : void;
    menuToggle: boolean;
    service : BaseHttpServiceInterface|BaseListHttpServiceInterface,
    data?: any|Array<any>,
    viewParams:ViewParams;
    dataBean? : any;
    dataArray? : Array<any>;    
    onCloseClick(a_event : MouseEvent) : boolean;
    onNewClick(a_event : MouseEvent) : boolean;
    onSaveClick(a_event : MouseEvent) : void;
    doSave() : Observable<boolean>;
    doMapSaveResult(a_result : HttpPostResult<any>|HttpPostResult<BeanId>) : boolean;
    doBeforeSave() : void;
    doAfterSave(a_result:boolean) : void;
    doLoadData() : void;
    doBeforeLoadData() : void;
    doAfterLoadData(a_result : HttpPostResult<any>) : void;
    onRefreshEvent(a_event : WebSocketRefreshMsg);
    onFullScreenEvent(a_event : boolean);
    doUpdateForms() : void;
    parent : BaseViewInterface;
    horodatageParams : HorodatageParams;
    modalService : MsModalService;
}

et pour l’utiliser on utilise le mot clef implements

export abstract class BaseViewComponent<SingleBean,ListBean> extends BaseComponent implements OnInit,OnDestroy,BaseViewInterface {