我从npm导入一个Javascript包,它在任何地方都没有Typescript定义文件。我想创建一个本地定义文件,我最终将PR定义为DefinitelyTyped或项目本身。
我无法确定在何处/如何创建和放置定义文件,以便在本地找到它。
我可以将它复制到node_modules/the-package
目录中,但在其他安全的npm操作中它会被破坏。
从观察tsc --traceResolution
开始,我没有看到一个很好的方法来做到这一点,除非有某种方法可以使用types
或typings
我没有#&# 39; t想。
答案 0 :(得分:4)
我失败的一种方法是创建一个本地*.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,它每次都会以这种方式破坏您的定义文件 - 请记住移动导入!
答案 1 :(得分:1)
您可以使用*.d.ts
创建一个本地文件,并创建一个与您的库同名的模块。
例如,如果您使用的是lodash,则可以通过创建d.ts
文件为其创建输入:
declare module "lodash" {
interface Lodash {
map: Function
}
var _: Lodash;
export = _;
}