2016-08-08 18 views
4

Wie soll ich Typoskript Schnittstelle zu definieren, diese C# Modelle implementieren:C# -Wörterbuch in TypeScript?

public class PageModel 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
    public IDictionary<string, FieldModel> Fields { get; set; } 
} 

public class FieldModel 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public string DataType { get; set; } 
    public string DefaultValue { get; set; } 
} 
+0

Doppelte http://stackoverflow.com/questions/15877362/declare-and-initialize-a-dictionary-in-typescript – Kalten

Antwort

9

Wenn Sie suchen Schnittstellen nur dann:

interface PageModel { 
    Id: number; 
    Name: string; 
    Fields: { [key: string]: FieldModel }; 
} 

interface FieldModel { 
    Id: number; 
    Name: string; 
    Type: string; 
    DataType: string; 
    DefaultValue: string; 
} 

einige Unterschiede:

  1. Javascript hat keine Begriff von long/integer/double, sie sind alle Zahlen
  2. In einer einfachen Map-Implementierung, die basiert auf In der js Objektnotation sind die Schlüssel nur Strings. In Typoskript heißen diese Indexable Types
  3. Während Sie get/set innerhalb von Klassen verwenden, haben die Schnittstellen das nicht und Sie können nur die Eigenschaft definieren.
+0

Warum eine 'interface' verwenden und kein' CLASS'? – fuzz

+1

@fuzz Wenn Sie nur nach Objekten suchen, die Daten enthalten (ohne Methoden), ist das JavaScript-Objekt eine bessere Option als eine Klasse. Sie verwenden eine Schnittstelle, um zu beschreiben, wie dieses js-Objekt aussehen wird. –