2016-08-08 5 views
0

Так что прямо сейчас я пытаюсь создать небольшое модульное веб-приложение. Я использую машинопись, которую я совершенно новичок.Интерфейс TypeScript не работает, как я ожидал

В моем коде, я:

  • определяют структуру интерфейса (ProgramList)
  • я создаю объект с одним свойством (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[], но вместо этого назначает program.ProgramList переменной ProgramInfo, которой, конечно, не существует.

Вместо этого вы должны назначить пустой массив в поле ProgramList.

let program = { 
    ProgramList: [] 
}; 

Если вы ищете более типобезопасность вы могли бы, конечно, добавить интерфейс, который описывает ваш program объект.

interface Program{ 
    ProgramList: ProgramInfo[]; 
} 
2

Когда вы делаете:

let program = { 
    ProgramList: ProgramInfo[] 
}; 

Вы объявляете объект program со свойством ProgramList. Но вы пытаетесь назначить массив интерфейсов этому свойству, это не имеет смысла. Вы можете сделать так:

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

Или так:

interface Program { 
    ProgramList: ProgramInfo[]; 
} 

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

Оно должно быть:

interface Program { 
    ProgramList: ProgramInfo[] 
} 

let program: Program = { 
    ProgramList: [] 
}; 
Смежные вопросы