2

我正在設置使用本機加載項的node.js項目。本地插件包含大量導出的函數。我已經設置了一個打印文件(.d.ts),其中包含從本地附件中導出的所有函數定義和數據等。當我用npm打包所有這些文件並將其安裝到客戶端項目中時,vscode intellisense會提取所有類型,一切正常。如何在node.js項目中爲本地vscode intellisense使用.d.ts類型?

當我嘗試在與原生插件相同的項目中使用test.js的類型時,類型沒有被拾取,特別是導出的變量;我懷疑它與.d.ts中輸出的方式或.d.ts中模塊的命名有關。

.d.ts,我有出口列爲;

interface MyI { 
    Initiate() : void; 
} 

module 'modulename' { 
    export var i : MyI; 
} 

require客戶機中的模塊(.js文件);

var i = require("modulename"); 

在測試代碼,我需要它作爲(因爲我存根它通過一個index.js文件);

var i = require("./index.js"); 

index.js反過來看起來像;

var i = require("./lib/nativeaddon"); 

module.exports.i = i; 

如何我得到vscode使用分型,局部,對於智能感知,當我使用的test.js加載項(通過index.js)?

+0

您是否看過設置打字稿的VS代碼? https://code.visualstudio.com/docs/languages/typescript – Paul

+0

我認爲你的意思是'test.ts',而不是'test.js',因爲JavaScript沒有任何TS感知智能感知。除非你定義了一個'index.d.ts'文件,否則你什麼都看不到。如果您更改爲'index.ts',事情會有所不同,但是。 –

+0

@AndrewEisenberg。我的意思是test.js,vscode使用打字稿來增加他們的intellisense。但是,命名類型index.d.ts可以解決intellisense問題,謝謝(我之前將它命名爲包名稱)。你有參考嗎?我仍然在處理打字稿的問題,並且解決方案沒有發生在我身上。能寫出來作爲答案嗎? – Niall

回答

3

要創建vscode智能感知的類型,以便在「本地」情況下(與test.js一起使用)和「全局」情況(作爲node_module)一起工作,在主/條目.js發揮作用之後命名該文件。在這種情況下,"main"文件爲index.js,因此類型變爲index.d.ts

這看起來很自然,但我一直無法找到vscode intellisense的文檔,它指定了這一點。

我之前命名的包/ node_module名稱後的分型,packagename.d.js),並保持"main"(從package.json)爲index.jspackage.json中的「類型」值也應與.d.ts文件名匹配。

我想一個整潔的替代「index.js」或「main.js」,將命名爲主入口點,以及相應的類型後,包名稱。

+0

嗨,你能分享一個最小的可重複的例子嗎?我無法說服VSCode接受類型,正如你在這裏描述的那樣。它似乎應該有效,但我可能會錯過一些關鍵的技巧。 – Yawar

+0

@Yawar。我沒有一個立即可用的,我會把它放在一起,但考慮到一年的時間,我不知道我什麼時候能夠發佈它。如果您懷疑這是本機模塊使事情變得複雜,請保持這種狀態,直到您只有智能感知工作,然後再摺疊本地模塊。 – Niall

+0

嗨,對不起,忘了更新你:根據https://github.com/Microsoft/TypeScript/issues/14342這(使用in-project打字到VSCode中的類型檢查)實際上是不可能的。 – Yawar

相關問題