如何在node_modules中为js项目使用本地Typescript定义文件?
我从进口NPM一个JavaScript包,没有一个打字稿定义文件的任何地方。我想创建一个本地定义文件,我最终将PR保存到DefinitelyTyped或项目本身。如何在node_modules中为js项目使用本地Typescript定义文件?
我想不出哪里/如何创建和放置定义文件,使得其将在当地找到。
我可以把它复制到node_modules/the-package
目录,但它会在安全的,否则NPM操作得到重挫。
通过观察tsc --traceResolution
,我没有看到一个很好的办法做到这一点,除非有某种方式使用types
或typings
,我没有想通。
您只需创建*.d.ts
本地文件,并且创建一个模块具有相同名称为您的图书馆。
例如,如果您正在使用lodash,你可以通过创建一个d.ts
文件为它创建分型:
declare module "lodash" {
interface Lodash {
map: Function
}
var _: Lodash;
export = _;
}
一个我在这个失败的方法是创建一个本地*.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,它每次都会打破你的定义文件以这种方式 - 记住移动进口!
如何/你在哪里声明的定义文件?你能用一个可重复的例子更新你的问题吗? – Saravana