2017-08-09 79 views
0

比方說,我想要寫一個模塊,它的JavaScript等價的打字稿定義如下:打字稿:聲明是一個函數變量名爲「新」

var service = {}; 
service.new = function (name, options) { 
    console.log('Ive been called!'); 
}; 
module.exports = service; 

我應如何申報呢?我找不到在服務上聲明這個屬性爲new的方法,因爲new是一個保留關鍵字,但這個JavaScript代碼仍然可以工作,並且應該可以在.d.ts文件中定義。

我最後的失敗嘗試是

export = ModuleName; 
export as namespace ModuleName; 

declare var instance: ModuleName.StaticInstance; 

declare namespace ModuleName { 

    interface StaticInstance { 
     new(name: string, options: ModuleName.Options): NewService; 
    } 

    interface NewService { 
     someMethod()... 
    } 

    interface Options { 
     option1: number; 
     ... 
    } 
} 

任何提示?

+0

名稱'!=='標識符,保留關鍵字只對標識符,而不是屬性名稱進行限制 – Dummy

+0

我得到的這個嘗試的錯誤是屬性「new」在StaticInstance上不存在。 – rels

回答

0

在某些情況下,你可以給標識符名稱:因爲你加上`new`作爲屬性的對象,如果你試圖聲明該名稱的變量,你會得到一個錯誤,財產

interface MyModule { 
    "new"(name: string, options: Options): NewService; 
} 

declare const m: MyModule; 
export = m; 
+0

有趣我很肯定已經嘗試過類似的東西,但顯然我做錯了,因爲它的工作原理!謝謝! – rels