TypeScript接口没有像我预期的那样工作

TypeScript Interface not working as I expected

本文关键字:工作 接口 TypeScript      更新时间:2023-09-26

所以现在,我正在尝试制作一个小型模块化web应用程序。我正在使用打字稿,这是我很陌生的。

在我的代码中,I:

  • 定义接口的结构(ProgramList(
  • 我创建了一个具有ProgramInfo类型的一个属性(ProgramList(的对象
  • 我使用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程序信息`

尽管我在最初几行上明确定义了CCD_ 7。

当你这样做时:

let program = {
    ProgramList: ProgramInfo[]
};

您使用属性ProgramList声明对象program。但您试图将接口数组分配给这个属性,这是没有意义的。你可以这样做:

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

或者像这样:

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

您在这里使用的是对象文字!这意味着双冒号:并不意味着ProgramList属于ProgramInfo[]类型,而是意味着将program.ProgramList分配给变量ProgramInfo,当然这并不存在。

您应该做的是为ProgramList字段分配一个空数组。

let program = {
    ProgramList: []
};

如果您正在寻找更多的类型安全性,您当然可以添加一个描述program对象的接口。

interface Program{
    ProgramList: ProgramInfo[];
}

应该是:

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