2017-04-08 52 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

相關問題