2016-06-09 12 views
0

Ich verwende TypeScript, um einen API-Wrapper für einen XML-REST-Service zu implementieren. Alle Anforderungen und Antworten werden in einem Schema beschrieben, und ich konnte cxsd und cxml verwenden, um entsprechende TypeScript- und JS-Definitionen zu generieren. Aber ich bin verwirrt über den von cxsd erzeugten Code. Das Beispiel ist in the repo, hier ist die vereinfachte Version:Fehler beim Verwenden der von cxml generierten TypeScript-Schnittstellen

interface _foo { 
    a: string; 
    b: bar; 
} 
interface foo extends _foo { constructor: { new(): foo } } 
var foo: { new(): foo }; 

interface _bar { 
    c: string; 
} 
interface bar extends _bar { constructor: { new(): bar } } 
var bar: { new(): bar }; 

Was constructor: { new(): foo } überhaupt bedeutet?

Ich muss diese Objekte selbst erstellen, um das XML zu erstellen und es an das API-Backend zu senden, aber ich bin nicht in der Lage, dies zu tun. Der Versuch, so etwas wie:

let obj: foo = { 
    a: "Test1", 
    b: { 
     c: "Test2" 
    } 
} 

ich diesen Fehler:

scripts/foo.ts (13,5): Type '{ a: string; b: { c: string; }; }' is not assignable to type 'foo'. 
    Types of property 'constructor' are incompatible. 
    Type 'Function' is not assignable to type 'new() => foo'. 
     Type 'Function' provides no match for the signature 'new(): foo' (2322) 

Wie könnte ich schaffen diese Objekte? Die gesamte Idee, TypeScript zu verwenden, besteht darin, zu verifizieren, dass sie zu 100% mit dem ursprünglichen XSD-Schema kompatibel sind.

Antwort

1

Wenn dies der Code Sie

let obj: Foo = { 
    a: "Test1", 
    b: { 
     c: "Test2" 
    } 
} 

Dies ist die Typdefinition Sie

interface Foo { 
    a: string, 
    b: { 
    c: string 
    } 
} 

The whole idea of using TypeScript here is to verify that they are 100% compatible to the original XSD schema

benötigen Sie haben es selbst zu schreiben. Oder finden Sie ein Werkzeug (das meiner Meinung nach nicht existiert, erfüllt Ihre Qualitätsanforderungen auch als funktioniert.)