2016-08-08 20 views
0

Ich versuche gerade, eine kleine modulare Webanwendung zu erstellen. Ich benutze Typoskript, mit dem ich ziemlich neu bin.TypeScript Interface funktioniert nicht so wie ich es erwartet habe

In meinem Code I:

  • definieren die Struktur einer Schnittstelle (ProgramList)
  • I ein Objekt mit einer Eigenschaft erstellen (ProgramList) vom Typ ProgramInfo
  • I definieren ProgramList mit einem Array Artikel mit der ProgramList Schnittstelle.

Hier ist mein Code:

interface ProgramInfo { 
    path:string; 
    name:string; 
    pkgname:string[]; 
    start?:string[]; 
    cli?:string[]; 
} 

let program = { 
    ProgramList: ProgramInfo[] 
}; 

program.ProgramList = [ 
    { 
     path: "/default_programs/WOSPMan", 
     name: "WOSPMan (WebOS Package Manager)", 
     pkgname: ["com", "webos", "wospman"], 
     start: ["wospman", "wospm"], 
     cli: ["wospman"] 
    } 
]; 

Meine IDE (JetBrains WebStorm), hält mich Typoskript Compile Fehler geben:

  • TS2304: Cannot find name ProgramInfo`

obwohl ich klar definiert ProgramInfo auf den ersten paar Zeilen.

+0

wie genau ich das tun? –

Antwort

1
let program = { 
    ProgramList: ProgramInfo[] 
}; 

Sie verwenden hier ein Objektliteral! Das heißt, der doppelte Doppelpunkt : bedeutet nicht, dass ProgramList vom Typ ProgramInfo[] ist, sondern bedeutet, dass program.ProgramList der Variablen ProgramInfo zugewiesen wird, die natürlich nicht existiert.

Sie sollten stattdessen ein leeres Array dem Feld ProgramList zuweisen.

let program = { 
    ProgramList: [] 
}; 

Wenn Sie mehr Typsicherheit freuen Sie könnte natürlich eine Schnittstelle hinzufügen, die Ihr program Objekt beschreibt.

interface Program{ 
    ProgramList: ProgramInfo[]; 
} 
2

Wenn Sie das tun:

let program = { 
    ProgramList: ProgramInfo[] 
}; 

Sie erklären Objekt program mit Eigentum ProgramList. Aber Sie versuchen, dieser Eigenschaft ein Array von Interfaces zuzuordnen, das macht keinen Sinn. Sie können wie folgt tun:

let program: {ProgramList: ProgramInfo[]} = { 
    ProgramList: [] 
}; 

Oder wie folgt aus:

interface Program { 
    ProgramList: ProgramInfo[]; 
} 

let program: Program = { 
    ProgramList: [] 
}; 
1

Es sollte:

interface Program { 
    ProgramList: ProgramInfo[] 
} 

let program: Program = { 
    ProgramList: [] 
};