2017-01-23 4 views
0

Ich teste FlowJS für mein Projekt, und ich habe ein Problem mit Type Aliases.FlowJS: Typen Vererbung

Ich baue einen Web-SDK für eine API: Ich habe eine Helper Klasse mit dieser Methode:

class Helper { 
    find(filters:PaginationOptions = {}) { 
     // ... 
    } 
} 

PaginationOptions ist ein grundlegender FlowJS Typ:

type PaginationOptions = { 
    start?:string, 
    end?:number, 
}; 

ich auch einen Helfer für Benutzer habe , abgeleitet von Helper:

class UsersHelper extends Helper { 
    find(filters:UsersFilterOptions = {}) { 
     // ... 
    } 
} 

UsersFilterOptions ist ein FlowJS Typ "extending" PaginationOptions:

type UsersFilterOptions = { 
    username?:string, 
    city?:string, 
} & PaginationOptions; 

ich hier verwenden, um eine Intersection so dass meine Benutzer Filter auch start und end Eigenschaften annehmen sollte.

Es scheint, dass meine IDE (PhpStorm) nicht wie meine find() Methode aus meiner Klasse UsersHelper, es sagt mir, dass:

Inkompatible Überschreibung sollte

Typ 'PaginationOptions' haben Nun ... ich weiß, deshalb hat UsersFilterOptions eine Kreuzung mit PaginationOptions.

Aber FlowJS zeigt mir auch zwei andere Warnungen:

Fluss: Eigenschaft username. Eigenschaft nicht im Objektliteral gefunden
Flow: Eigenschaft city. Eigenschaft nicht gefunden in Objektliteral

Ich verstehe nicht, warum ich diese Fehler haben: diese Eigenschaften werden als optional definiert ...

Haben Sie Vorschläge für die Festsetzung dieser drei Fehler?

Vielen Dank im Voraus!

+0

@ nat-mote Darf ich wissen, warum das Tag 'flow-js' entfernt wurde? Bei dieser Frage geht es ausschließlich um "flow-js". Es ist ziemlich sinnlos, dieses Tag zu entfernen ... – KorHosik

+0

Schauen Sie sich die Beschreibung für dieses Tag an, es ist für ein anderes Projekt, das nicht die Art des Flow-Checkers ist. Das Tag für das, was Sie wollen, ist FlowType: http://StackOverflow.com/Tags/Flow-Js/info –

+0

Ok, danke für die Informationen :) – KorHosik

Antwort

2

Wenn Sie eine Methode außer Kraft setzen, dann ist es Argumente übergeordneten Typen von entsprechenden Argumente in der Basisklasse sein sollte, so können Sie dies tun:

class A { 
    test(x: number) { 
    } 
} 

class B extends A { 
    test(x: number | string) { 
    } 
} 

Aber man kann dies nicht tun:

class A { 
    test(x: number | string) { 
    } 
} 

class B extends A { 
    test(x: number) { 
    } 
} 
+0

Vielen Dank für Ihre Antwort :) Dieses Verhalten ist meiner Meinung nach ziemlich seltsam, aber warum nicht ... Irgendeine Idee, wie man mein Problem löst und den Compiler glücklich macht? – KorHosik