我正在尝试测试为没有任何内容的节点项目所做的一些 typescript 定义。当我将它们包含在消耗目标节点项目的项目中时,或者当我在node_modules/@types/
中创建自己的文件夹并将其放在那里(node_modules/@types/chrome-aws-lambda/index.d.ts
)时,它们已经起作用。这正在使用节点8.10,npm 5.6和 typescript 3.1
但是,我从github fork 了该模块的存储库,并希望将其包含在项目中,以便其他人可以使用它。为了做到这一点,我编辑了 fork 项目的package.json
,将types
指向位于source/index.d.ts
和main
文件旁边的source/index.js
。然后在我的项目中,我使用npm link ../chrome-aws-lambda
将其链接。
这是行不通的。当我运行tsc
时,找不到它说的模块。error TS2307: Cannot find module 'chrome-aws-lambda'
当我使用--traceResolution
运行它时,它似乎并没有尝试寻找它。
我发现它可能与未真正“安装”软件包有关,因此我尝试将项目目录复制到node_modules
而不是链接它。我还认为也许有些东西无法正常工作,并且 typescript 没有读取types
中的package.json
字段,所以我将一个放在根目录中,因为这是默认设置。我以为可能没有包含它,所以我在.tsconfig
的include部分中添加了它。我也尝试在配置文件中更改baseUrl
,paths
,typeRoots
和moduleResolution
。
这些都不起作用。
我不想提交PR,而无法知道它是否有效。有人对在这里做什么有任何线索吗?我很乐意添加所需的任何相关信息,请让我知道!我在下面添加了index.d.ts
以及import语句,以防万一我在那儿做一些愚蠢的事情。
谢谢!
index.d.ts:
declare module 'chrome-aws-lambda' {
import * as Puppeteer from 'puppeteer';
export default class Chromium {
static args : Array<string>;
static defaultViewport : {
width : number,
height : number,
deviceScaleFactor : number,
isMobile : boolean,
hasTouch : boolean,
isLandscape : boolean
};
static executablePath : Promise<string>;
static headless : boolean;
static puppeteer : typeof Puppeteer;
}
}
以及相关的进口声明:
import Chromium from 'chrome-aws-lambda';
最佳答案
根据this answer,您必须将.d.ts
文件设为模块。希望它会有所帮助。
另外,您不必将.d.ts
放在特殊路径中,它可以在项目中的任何位置。我认为这个discussion 将非常有帮助。
关于typescript - Typescript找不到本地链接的模块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53489740/