2017-03-06 133 views
0

我已經爲npm包react-sortable-tree寫了類型定義。我無法確定我應該如何使用它。這是我的嘗試。如何使用npm模塊的自定義類型定義?

我給定義文件react-sortable-tree/index.d.ts命名(按照Typescript documentation給出的說明),並將文件名添加到我的tsconfig.json。 Typescript編譯器(版本2.2.1)找不到模塊的定義。我試過module resolution methodsClassicNode沒有成功。

將文件重命名爲react-sortable-tree.d.ts後,編譯器使用分辨率方法Classic識別文件。但是,其他模塊隨npm包中包含的類型定義文件一起提供(例如,redux),編譯器無法找到這些包的定義。

當使用解析方法Node時,編譯器查找所有包的類型定義,除了我已定義的包之外。對於react-sortable-tree包,編譯器將解析包附帶的實際JavaScript文件的路徑並忽略我的定義。因此,不會進行類型檢查。

我該如何編寫我的定義,我在哪裏放置它,以及我應該指定哪些編譯器選項,以便該編譯器考慮我的類型定義?

+0

看完後[文檔](https://www.typescriptlang.org/docs/handbook/module-resolution.html)進一步,我意識到我可以創建一個名爲'node_modules'的目錄,將我的定義放在那裏,讓編譯器回覆解決它。我嘗試過,它的工作原理。是否可以有一個名爲'node_modules'的目錄不由'npm'管理? –

+0

不應該需要創建自己的node_modules文件夾否,並且Id建議您不要使用它,以防萬一以後使用node_modules。 – Flion

回答

0

這裏是我的設置爲故宮模塊jison聲明文件:

tsconfig:

"include": [ 
    "./src/definitions/jison.d.ts", 
    "./src/index.ts" 
] 

./src/definitions/jison.d.ts:

declare module Jison 
{ 
    export class Parser { 
     constructor(grammar:any); 
     generate():string; 
     parse(program:string):any; 
    } 
} 
declare module "jison" 
{ 
    export = Jison; 
} 
+0

你在'tsconfig.json'中指定了一個'resolutionMethod'嗎?如果沒有指定,解析方法是'Classic',這導致編譯器不能識別像'redux'這樣的包的定義,這些包都有自己的定義(這就是我所看到的行爲)。 –