2016-07-12 6 views
1

Ich lerne TypeScript und ich verstehe keine Dinge über Schnittstelle.Wie Duplizierungsschnittstelle in TypeScript vermieden werden kann

interface IMyClass extends MyClass { 
    color: number; 
    IsResizable: boolean; 
    title: string; 
} 

class MyClass { 
    added: string; 
    //color: number; 
    //IsResizable: boolean; 
    //title: string; 

    constructor(element: HTMLElement) { 
    } 

    test() { 
     var that: IMyClass = <IMyClass>this; // Error 
    } 
} 

Ich habe diesen Fehler:

Severity Code Description Project File Line Suppression State 
Error TS2352 Neither type 'this' nor type 'IMyClass' is assignable to the other. 
    Type 'MyClass' is not assignable to type 'IMyClass'. 
    Property 'color' is missing in type 'MyClass'. TypeScrip app.ts 17 Active 

Der Fehler verschwinden, wenn ich Attribute Kommentar-. Meine Frage ist also: Muss ich Schnittstellenattribute in meine Klasse kopieren? Was ist, wenn ich eine riesige Schnittstelle habe? Irgendeine andere Lösung?

+0

vielleicht in der Dokumentation Schnittstellen aus dem Handbuch lesen wird helfen, die Rolle der Schnittstellen in Typescript zu klären? https://www.typescriptlang.org/docs/handbook/interfaces.html – toskv

+0

Vielleicht können Sie erklären, was Sie versuchen zu tun? Normalerweise geht es umgekehrt, die Klasse implementiert eine Schnittstelle. –

+0

Sie haben eine Schnittstelle definiert, die eine Unterklasse von MyType ist. Denk einfach darüber nach, MzClass hat keine Farbe, aber du versuchst es IMyClass zuzuordnen –

Antwort

1

Im Falle, dass es wirklich Sinn macht, dass die Umwandlung zu tun, wir doppelte Behauptung verwenden können:

// error 
var that: IMyClass = <IMyClass>this; // Error 
// firstly to any, then to some type 
var that: IMyClass = <IMyClass><any>this; // Error 

es in Aktion Check-in the TS playground

+0

Ja, ich kenne die doppelte Behauptung. Aber alles in TypeScript ist über stark typisierte Variablen/Objekte/etc ... so gibt es keine Alternativen zur Verwendung von lokoum

+2

Ich beantworte Ihre Frage * "... eine andere Lösung?" * ... weil Sie brechen das Konzept. Sie versuchen, ein Objekt in ein anderes zu verwandeln, während der TS-Compiler Ihnen sagt, dass es nicht funktionieren wird. Also habe ich dir gezeigt, wie man in extremen Extremszenarien umgeht ... aber im Allgemeinen ... vermeide das. Einfach aussprechen (behaupten), was wirklich Sinn macht ... was die geforderte Schnittstelle erfüllt ... Hoffe es hilft ein bisschen;) –

+1

Ok danke für deine Hilfe. Ich werde versuchen, meinen Code neu zu strukturieren, um die Verwendung von Code zu vermeiden – lokoum