2017-08-13 65 views
0

我從進口NPM一個JavaScript包,沒有一個打字稿定義文件的任何地方。我想創建一個本地定義文件,我最終將PR保存到DefinitelyTyped或項目本身。如何在node_modules中爲js項目使用本地Typescript定義文件?

我想不出哪裏/如何創建和放置定義文件,使得其將在當地找到。

我可以把它複製到node_modules/the-package目錄,但它會在安全的,否則NPM操作得到重挫。

通過觀察tsc --traceResolution,我沒有看到一個很好的辦法做到這一點,除非有某種方式使用typestypings,我沒有想通。

回答

1

您只需創建*.d.ts本地文件,並且創建一個模塊具有相同名稱爲您的圖書館。

例如,如果您正在使用lodash,你可以通過創建一個d.ts文件爲它創建分型:

declare module "lodash" { 

    interface Lodash { 
     map: Function 
    } 

    var _: Lodash; 
    export = _; 
} 

documentation on creating declarations

+0

如何/你在哪裏聲明的定義文件?你能用一個可重複的例子更新你的問題嗎? – Saravana

2

一個我在這個失敗的方法是創建一個本地*.d.ts文件中像這樣一行修改@ Saravana的例子:

import {Component} from 'react' 

declare module 'lodash' { 

    interface Lodash { 
     map: Function 
    } 

    var _: Lodash; 
    export = _; 
} 

這喚起了神祕的錯誤消息

Error:(3, 16) TS2665:Invalid module name in augmentation. Module 'lodash' resolves to an untyped module at 'my-project/node_modules/lodash/lodash.js', which cannot be augmented.

錯誤讓我覺得,這種做法一定是完全錯誤的,當它真的只是抱怨一個簡單的,易於修復錯誤。當你在一個文件中使用import時,它將文件轉換成一個模塊,當Typescript在模塊內部看到一個declare module時,它假定你正在嘗試增強現有的定義。解決方法是簡單的:只要將進口declare塊中,像這樣:

declare module 'lodash' { 

    import {Component} from 'react' 

    interface Lodash { 
     map: Function 
    } 

    var _: Lodash; 
    export = _; 
} 

如果您使用自動導入的IDE,它每次都會打破你的定義文件以這種方式 - 記住移動進口!

相關問題