2017-04-08 53 views
1

下面的代码工作:为什么我必须使用“new BrowserWindow”而不是“new Electron.BrowserWindow”实例化Electron.BrowserWindow?

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

我收到的电子运行应用程序时出现错误:

Uncaught Exception: ReferenceError: Electron is not defined

代码在运行“tsc”时编译得很好。

综观打字定义,我看到Electron.BrowserWindow是一类,而BrowserWindow(一个被从导入模块解体)的CommonElectron接口下的定义为:

BrowserWindow: typeof Electron.BrowserWindow; 

回答

2

electron分型在DefinitelyTyped中已过时。

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

在实际的JavaScript中,electron没有定义全局变量Electron(因此,您看到的错误)。

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

我同意让类型暴露命名空间Electron是混淆,应该删除。

electron正在努力拥有自己的类型。

你可以在这里关注它:https://github.com/electron/electron/issues/4875

相关问题