【问题标题】:Type assertion for non exported interface非导出接口的类型断言
【发布时间】:2016-10-03 20:46:00
【问题描述】:

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

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

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

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

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

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);

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

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

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

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

【问题讨论】:

  • Electron 是一个全局变量。您可以通过 const template: Electron.MenuItemOptions[] = ... 访问 MenuItemOptions
  • 我在尝试您的代码时遇到的错误是:属性“角色”的类型不兼容。类型“字符串”不可分配给类型“撤消”| “重做” | “切” | “复制” | “粘贴” | “全选” | “最小化” | "关闭" | “关于” | “隐藏...”。类型“字符串”不可分配给类型“服务”。
  • @cdbajorin - 我不得不承认。我仍然不明白打字中的“全球”事物。我已经阅读了试图解释的打字文件。你知道其他材料吗?仅供参考 - 谢谢。

标签: menu typescript menuitem electron typescript-typings


【解决方案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...'类型不兼容

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 2021-05-24
    • 2023-04-03
    • 1970-01-01
    • 2021-12-05
    • 2016-08-01
    • 2021-02-10
    • 2019-07-28
    • 1970-01-01
    相关资源
    最近更新 更多