2014-02-21 9 views
5

Ich habe Visual Studio 2013 installiert mit Web Essentials 2013 I Rechtsklick auf eine CS-Datei und wählen Sie zu erzeugen, so dass ich eine Typoskript-d.ts-Datei, auf die ich im Typoskript-Code verweisen kann. Ich habe damit ein paar Probleme bekommen. Lassen Sie uns sagen, dass meine Klasse ist wie folgt:Verwendung von Web Essentials-2013 Typoskript Intellisense-Datei nicht funktioniert

namespace SomeNamespace 
{ 
    [TypescriptModule("test")] 

    [DataContract(Name = "MyDTO")] 
    public partial class MyPM 
    { 
     [DataMember(Name = "id")] 
     public long Id { get; set; } 

     [Required] 
     [DataMember(Name = "name")] 
     public CustomPM Data{ get; set; } 
    } 
} 

Die d.ts Datei, die ich bekommen ist:

declare module test { 
    interface MyPM{ 
     id: number; 
     data: test.CustomPM; 
    } 
} 

Das erste Problem ist, dass die Zeile:

[DataContract(Name = "MyDTO")] 

während ignoriert wird Generation. Es erzeugt nicht eine Klasse namens MyDTO, sondern eine Klasse MyPM, obwohl MyDTO ist die Zeichenfolge angegeben für die Verwendung bei der Serialisierung genannt und das ist, was an den Client über den Draht geht. Ich habe einige Untersuchung und den Code hier:

https://github.com/madskristensen/WebEssentials2013/blob/master/EditorExtensions/Commands/Code/IntellisenseParser.cs#L207

zeigt an, dass es CodeClass.Name Eigenschaft verwendet den Klassennamen zu bestimmen. Gibt es eine Möglichkeit, Attribute für die Klasse (etwas außer DataContract Name) zu verwenden, damit die CodeClass.Name-Eigenschaft neben dem eigentlichen Klassennamen eine andere Zeichenfolge enthält?

Das zweite Problem ist diese Zeile:

data: test.CustomPM; 

in Visual Studio 2013 mit Typoskript installiert ist, gibt test.CustomPM mir einen Fehler, da es, obwohl das nicht in der Lage, die Art CustomPM in dem Testmodul zu finden, Klasse wurde in das gleiche "Test" -Modul generiert und steht zur Verfügung. Der Teil, der an der Spitze der d.ts Datei ist diese Zeile fehlt:

/// <reference path="./CustomPM.cs.d.ts"/> 

Allerdings hat ich es nicht gelungen, einen Weg zu finden, den Generator zu haben, dies auch zu generieren.

Ich würde wirklich zu schätzen, ist jemand etwas Licht auf Wege vergießen, um diese Probleme zu arbeiten. Vielen Dank!

Antwort

0

Es ist eine alte Frage, und ich werde nicht direkt beantworten, weil ich nicht diese fonctionnality von WebEssentials kannte.

Aber ich werde Sie eine alternative geben, die wirklich gut funktioniert:

TypeLite - http://type.litesolutions.net/

Sie müssen nur die Ausprägungs setzen [TsClass] auf die Klassen, die Sie wollen.

Wenn Sie Ihre TS-Interface mit I und alle Eigenschaften camelcase zu starten, bearbeiten TypeLite.Net4.tt:

var ts = TypeScript.Definitions() 
     .WithReference("Enums.ts") 
     .ForLoadedAssemblies() 
     .WithFormatter((type, f) => "I" + ((TypeLite.TsModels.TsClass)type).Name) 
     .WithMemberFormatter((TypeLite.TsModels.TsProperty identifier) => Char.ToLower(identifier.Name[0]) + identifier.Name.Substring(1)); 
0

Sie können Sie Ihre generierten Typen in Ihrer Basis tsconfig.json, dann don Referenz‘ t müssen die benutzerdefinierte Referenz in jedem Typoskript-Datei:

{ 
    "compilerOptions": { 
    "module": "commonjs", 
    "target": "es6", 
    "jsx": "preserve" 
    }, 
    "files": [ 
    "../typings/index.d.ts", 
    "./TestForm.tsx", 
    "./declaration.d.ts", 
    "../models/models.cs.d.ts" 
    ] 
} 
Verwandte Themen