TypeScript接口无法正常工作

时间:2016-08-08 14:12:24

标签: javascript typescript

现在,我正在尝试制作一个小型模块化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

3 个答案:

答案 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: []
};