在TypeScript项目中是否有正确的方法来使用JavaScript模块?

Is there a correct way to use a JavaScript module in a TypeScript project?

本文关键字:方法 JavaScript 模块 项目 TypeScript 是否      更新时间:2023-09-26

我真的希望这不是一个意见问题,我不认为这是…

是否有一个正确的方法来包括一个JS模块在TS项目?如果我不做下面两个步骤中的一个,我的IDE (linter,无论什么)在我使用import * as myPackage from 'myPackage'时给我TS2307: Cannot find module

我使用的步骤是

npm i thePackage --save
typings i -g thePackage --save // assuming it has a typings

如果模块没有类型,你所要做的就是

declare let myPackage:any

这是为了在TS项目中使用外部包所要做的全部吗?还是我错过了重要的一步?

我知道我可以创建一个。d。但是现在,我想掌握ts的窍门,而不想把所有的时间都花在编写这些文件上。

我也一直在阅读DefinitelyTyped@types/myPackage,但我不太了解它…

如果包中有声明文件

在TypeScript 2.0+中,对于包the-package

npm install --save @types/the-package

如果包没有声明文件

如果包没有声明文件,创建一个名为externals.d.ts的文件,文件如下:

// This file should contain no top-level imports or exports.
declare module "the-package";

注意:如果您可以从the-package导入多个内容,您也可以使用通配符:

declare module "the-package/*";
在这一点上,您可以在导入包时对它做任何您想做的事情-它以any的形式出现。

强类型的包

如果你想添加一些类型安全,我们将开始在名为externals的文件夹中定义模块。

我们写./externals/the-package/index.d.ts

export function foo(): void;
export function bar(x: string): number;

现在将以下内容添加到tsconfig.json的编译器选项中。

{
    "compilerOptions": {
        "baseUrl": "./",
        "paths": {
            "*": ["externals/*"]
        }
    }
}

现在任何模块都应该先在externals中查找,然后再在@types &node_modules .

注意:这里假设externalstsconfig.json在同一个目录下。适当地调整。

一旦你的模块完全写出来,你可以发送这个包的PR到DefinitelyTyped,如果你想帮助别人。