现在,我正在尝试制作一个小型模块化Web应用程序。我正在使用打字稿,我很陌生。
在我的代码中,我:
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),一直给我TypeScript编译错误:
TS2304: Cannot find name
ProgramInfo` 虽然我在前几行清楚地定义了ProgramInfo
。
答案 0 :(得分:2)
当你这样做时:
let program = {
ProgramList: ProgramInfo[]
};
您使用属性program
声明对象ProgramList
。但是你试图为这个属性分配接口数组,它没有意义。你可以这样做:
let program: {ProgramList: ProgramInfo[]} = {
ProgramList: []
};
或者像这样:
interface Program {
ProgramList: ProgramInfo[];
}
let program: Program = {
ProgramList: []
};
答案 1 :(得分:1)
let program = {
ProgramList: ProgramInfo[]
};
你在这里使用的是对象文字!这意味着双冒号:
并不意味着ProgramList
属于ProgramInfo[]
类型,而是意味着将program.ProgramList
分配给变量ProgramInfo
,这当然不会不存在。
您应该做的是将空数组分配给ProgramList
字段。
let program = {
ProgramList: []
};
如果您正在寻找更多类型的安全性,您当然可以添加一个描述您的program
对象的界面。
interface Program{
ProgramList: ProgramInfo[];
}
答案 2 :(得分:1)
应该是:
interface Program {
ProgramList: ProgramInfo[]
}
let program: Program = {
ProgramList: []
};