我正在尝试测试为没有任何节点项目的打字稿定义。当我将它们包含在消耗目标节点项目的项目中时,或者当我在node_modules/@types/
中创建自己的文件夹并将其放置在node_modules/@types/chrome-aws-lambda/index.d.ts
中时,它们已经起作用。这是使用节点8.10,npm 5.6和打字稿3.1
但是,我从github分叉了模块的存储库,希望将其包含在项目中,以便其他人可以使用它。为了做到这一点,我编辑了分叉项目的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
而不是链接它。我还以为也许是有些问题,并且打字稿没有读取types
中的package.json
字段,所以我将其中一个放在根目录中,因为这是默认设置。我以为可能没有包含它,因此我将其添加到了.tsconfig
的包含部分中。我也尝试在配置文件中更改我的baseUrl
,paths
,typeRoots
和moduleResolution
。
这些都不起作用。
我不希望知道PR是否有效而提交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';
答案 0 :(得分:-1)
根据this answer,您必须将.d.ts
文件设为模块。希望对您有所帮助。
此外,您不必将.d.ts
放在特殊路径中,它可以在项目中的任何位置。我认为这个discussion 会很有帮助。