menu - 非导出接口(interface)的类型断言

标签 menu typescript menuitem electron typescript-typings

我是 Typescript 的新手,如果这是一个简单的问题,我深表歉意。

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

这似乎很好。我现在可以根据需要从类型中导入声明。

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

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

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

并且MenuItemOptions接口(interface)没有在定义文件中导出。

我尝试了两件事:
 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);

这给了我一个错误:“类型的参数'{标签:字符串;子菜单:{标签:字符串;加速器:字符串;角色:字符串;}[];}[]'不可分配给'MenuItemOptions []类型的参数’。”

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

这是定义中的错误吗? MenuItemOptions 是否也应该被导出?或者,我做错了什么。

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

最佳答案

显式输入 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...' 不兼容

关于menu - 非导出接口(interface)的类型断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37620226/

相关文章:

html - 我的 CSS 下拉菜单中需要第三级

html - CSS 调整为简单的下拉菜单

html - 垂直 CSS 菜单,链接内有边框,填满整个宽度

excel - 使用选项保护 Office 脚本中的工作表

javascript - 如何在 Cordova 插件中包含 npm 依赖项

javascript - Angularjs 双向数据绑定(bind)不起作用; $watch 也不起作用

android - onPrepareOptionsMenu 重复 ActionBar 中的项目

jquery - 移动所有网站内容的下拉菜单

c# - 将彩色椭圆添加到 MenuItem

wpf - MenuItem IsChecked 属性未绑定(bind)到 VM 属性