为什么我必须使用“new BrowserWindow”而不是“new Electron.BrowserWindow”来实例化Electron.BrowserWindow?

时间:2017-04-08 22:05:01

标签: typescript electron

以下代码有效:

import { app, BrowserWindow } from 'electron';

class Main {
    static mainWindow: Electron.BrowserWindow;
    static application: Electron.App;

    private static onWindowAllClosed() 
    {
        if (process.platform !== 'darwin')
            Main.application.quit();
    }

    private static onClose()
    {
        Main.mainWindow = null;
    }

    private static onReady()
    {
        Main.mainWindow = new BrowserWindow({ width: 800, height: 600 })
        Main.mainWindow.loadURL('file://' + __dirname + '/index.html');
        Main.mainWindow.on('closed', Main.onClose);
    }

    static main(app: Electron.App)
    {
        Main.application = app;
        Main.application.on('window-all-closed', Main.onWindowAllClosed);
        Main.application.on('ready', Main.onReady);
    }
}

Main.main(app);

当我尝试(在onReady中)代替:

Main.mainWindow = new Electron.BrowserWindow({ width: 800, height: 600 })

在Electron中运行应用程序时收到错误:

  

未捕获异常:ReferenceError:未定义电子

运行“tsc”时代码编译正常。

查看输入定义,我看到Electron.BrowserWindow是一个类,而BrowserWindow(从导入模块解构的那个)在CommonElectron接口下被定义为:

BrowserWindow: typeof Electron.BrowserWindow;

1 个答案:

答案 0 :(得分:2)

DefinitelyTyped中的electron类型已过时。

您引用的Electron是由typings(类型定义)创建的名称空间,用于保存描述electron中类型的所有类型。

在实际的JavaScript中,electron没有定义全局变量Electron,因此会出现错误。

导入语句import { BrowserWindow } from 'electron'是获取实际BrowserWindow类的ES6语法,以便您可以使用它。

我同意公开名称空间Electron的打字令人困惑,应该删除。

electron正在努力拥有自己的打字。

您可以在此处关注:https://github.com/electron/electron/issues/4875