为非导出接口

时间:2016-06-03 17:22:43

标签: menu typescript menuitem electron typescript-typings

我是Typescript的新手,如果这是一个简单的问题,请道歉。

我正在尝试构建一个在Electron上运行的应用程序(http://electron.atom.io/)。我使用typings(https://github.com/typings/typings)添加了类型声明 - 使用env:electron typings。

这似乎没问题。我现在可以根据需要从打字输入声明。

但是,我正在尝试为我的应用程序创建一个应用程序菜单。我想要使​​用的方法是创建一个"模板"对象并使用Menu.buildFromTemplate方法(http://electron.atom.io/docs/api/menu/)。

我面临的问题是Menu.buildFromTemplate的Type定义指定:

static buildFromTemplate(template: MenuItemOptions[]): Menu;

并且未在定义文件中导出MenuItemOptions接口。

我尝试了两件事:

 const template = [
 {
    label: 'Edit',
    submenu: [
      {
        label: 'Undo',
        accelerator: 'CmdOrCtrl+Z',
        role: 'undo'
      },
      {
        label: 'Redo',
        accelerator: 'Shift+CmdOrCtrl+Z',
        role: 'redo'
     } 
    ]
  }
];

const menu = Menu.buildFromTemplate(template);

这给了我一个错误:"类型的参数' {label:string;子菜单:{label:string;加速器:字符串;角色:字符串; } []; } []'不能分配给' MenuItemOptions []'类型的参数。"

由此,我认为我需要将模板转换为MenuItemOptions。但是,我无法在导入中添加MenuItemOptions,因为它未在定义中导出。

这是定义中的错误。是否还要导出MenuItemOptions?或者,我做错了什么。

如果需要,我可以提供完整的来源。

1 个答案:

答案 0 :(得分:1)

明确输入template对我有用

const template : Electron.MenuItemOptions[] = [
 {
    label: 'Edit',
    submenu: [
      {
        label: 'Undo',
        accelerator: 'CmdOrCtrl+Z',
        role: 'undo'
      },
      {
        label: 'Redo',
        accelerator: 'Shift+CmdOrCtrl+Z',
        role: 'redo'
     } 
    ]
  }
];

const menu = Menu.buildFromTemplate(template);

这似乎是因为role属性已注册为string类型,但与'"undo" | "redo" | "cut" | "copy" | "paste" | "selectall" | "minimize" | "close" | "about" | "hide...'类型无法兼容