2014-09-19 41 views
0

我可能正在接近這個完全不正確,所以任何建議表示讚賞。我目前正在深入挖掘Typescript,並決定同時使用Sql.js(JS版本的SQLite)...Typescript和sql.js - 如何判斷它在那裏的Typescript

我第一個使用Sql.js的本能是搜索對於Sql.js中的一組.d.ts綁定,我可以很容易地開始使用它與TS。我到目前爲止還沒有提出任何綁定(我認爲還沒有存在),但我認爲我可以從庫中開始「定義」我需要的東西...

從開始從「sql.js」文檔的簡單的例子之一,你有這樣的事情:

var sql = window.SQL; 
var db = new sql.Database(); 

移動到打字稿身邊,我想讓TS知道sql.js庫包含之後,窗口對象現在有一個名爲SQL的屬性,它本質上是庫的其餘部分的鉤子。我想我需要這樣做,因爲當然,當我輸入「窗口」時。 (window-dot)在我的TS文件中的Visual Studio中,呈現的Intellisense不知道現在掛在「窗口」上的SQL屬性。所以......我在Stack上挖了一遍,並得出結論說我可以用一個「聲明」來解決這個問題,我基本上認爲這是一種告訴TS關於庫的一種方法,我沒有綁定文件(.d.ts文件)。

然而,在這樣做,我似乎無法構造這種聲明的語法。我試過了:

declare var window.SQL : any; 
declare var window.SQL; 
declare var SQL = window.SQL; 
declare window.SQL; 

當然,這些工作都不是。

所以,問題是,我如何讓TS知道由JS庫引入的標準對象(如「窗口」)中的新屬性,並且後續問題當然是這種接近正確的方式這個?

感謝您的任何見解。

回答

1

window被聲明爲interface Window(在lib.d.ts中)。所以,你需要的,如果你想使用window.SQL要補充的:

interface Window{ 
    SQL:any; 
} 

var sql = window.SQL; 
var db = new sql.Database(); 

推薦:

我個人建議不要使用它關閉的window,只是做

declare var SQL:any; 
var db = new SQL.Database(); 

默認情況下,瀏覽器中的變量訪問是window

+1

是的 - 顯然我們在同一時間打字...完全是我得到的答案。我喜歡提醒SQL,默認情況下,關閉「窗口」。使它更清潔一點 - 我也會採納這個建議。乾杯! – 2014-09-19 01:29:58

0

好吧,我想我已經想通了,雖然我還不確定這是否是首選的方法。

在檢查lib.d.ts時,我發現聲明去的地方几乎是太陽的核心,我發現不止一次聲明瞭Window的接口。這導致了我的結論:TS接口聲明(和其他聲明)基本上可以是「部分」。看起來,任何接口的定義可以通過簡單地添加額外的項目在一個全新的聲明...

因此,目前,我憤怒的紅色波浪線下的「窗口。SQL」已通過簡單地添加走了以下內容:

interface Window { 
    SQL: any; 
} 

這似乎在lib.d.ts因爲工作,‘窗口’變量定義爲一個‘窗口’是這樣的:

declare var window: Window; 

...在文件的第9867行,以防別人正在尋找它。所以,淨效果似乎是,我擴展了「Window」的定義,知道sql.js會創建一個名爲「 SQL「就可以了。

HTH,萬一其他人都在洞察相同的概念