7

我正在尝试测试我为没有任何节点项目所做的一些打字稿定义。当我将它们包含在使用目标节点项目的项目中时,或者当我在其中创建自己的文件夹node_modules/@types/并将它们放在那里(node_modules/@types/chrome-aws-lambda/index.d.ts)时,它们已经工作了。这是使用节点 8.10、npm 5.6 和 typescript 3.1

但是,我已经从 github 分叉了该模​​块的存储库,并希望将其包含在项目中,以便其他人可以使用它。为了实现这一点,我编辑了分叉项目以package.json指向位于,文件旁边的项目。然后在我的项目中,我使用.typessource/index.d.tsmainsource/index.jsnpm link ../chrome-aws-lambda

这不起作用。当我运行tsc它时找不到它说的模块。 error TS2307: Cannot find module 'chrome-aws-lambda' 当我用它运行它时,--traceResolution它甚至似乎都没有尝试寻找它。

我认为这可能与没有真正“安装”的包有关,所以我试图将项目目录复制到node_modules而不是链接它。我还认为也许某些东西不起作用并且打字稿没有读取该types字段,package.json所以我将一个放在根目录中,因为这是默认设置。我想也许它没有被包含在内,所以我将它添加到我的.tsconfig. 我也尝试在配置文件中更改我baseUrl的 , paths,typeRootsmoduleResolution

这些都不起作用。

我不想在不知道它是否有效的情况下提交 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';

4

1 回答 1

1

根据这个答案,你必须让你的.d.ts文件成为一个模块。希望它会有所帮助。

此外,您不必放置.d.ts特殊路径,它可以在任何地方的项目中。我认为这个讨论会很有帮助。

于 2018-11-27T10:08:27.380 回答