2016-08-08 6 views
0

今、私は小さなモジュラーWebアプリケーションを作成しようとしています。私はtypescriptを使用しています。これはかなり新しいです。私のコードでTypeScriptインターフェイスが期待通りに機能しない

、I:

  • インターフェース(ProgramList
  • の構造を定義する私は私は1つの配列とProgramListを定義タイプProgramInfo
  • の一つの特性(ProgramList)を持つオブジェクトを作成します項目はProgramListインターフェイスを使用しています。
ここ

が私のコードです:私の活字体のコンパイルエラーを与え続け、

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"] 
    } 
]; 

私のIDE(JetBrainsのWebStorm):

  • TS2304: Cannot find name ProgramInfo`

が、私は明らかに最初の数行にはProgramInfoが定義されています。

+0

正確にどのように行うのですか? –

答えて

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

ここでオブジェクトリテラルを使用しています。つまり、ダブルコロン:ProgramListのタイプがProgramInfo[]であることを意味するのではなく、変数ProgramInfoprogram.ProgramListを割り当てることを意味しますが、もちろん存在しません。

代わりに、空の配列をProgramListフィールドに割り当てます。あなたはより多くのtypesafetyを探しているなら

let program = { 
    ProgramList: [] 
}; 

あなたはもちろん、あなたのprogramオブジェクトを記述するインタフェースを追加することができます。

interface Program{ 
    ProgramList: ProgramInfo[]; 
} 
2

あなたは:

let program = { 
    ProgramList: ProgramInfo[] 
}; 

あなたはプロパティProgramListでオブジェクトprogramを宣言します。しかし、このプロパティに配列の配列を代入しようとすると、意味をなさない。あなたはこのように行うことができます。

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

またはこのような:

interface Program { 
    ProgramList: ProgramInfo[]; 
} 

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

それは次のようになります。私はそれを

interface Program { 
    ProgramList: ProgramInfo[] 
} 

let program: Program = { 
    ProgramList: [] 
}; 
関連する問題