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

时间:2016-11-15 00:33:57

标签: javascript typescript

我真的希望这不是意见问题,我认为不是......

是否有正确的方法在JS项目中包含JS模块?如果我不执行以下两个步骤之一,当我使用行TS2307: Cannot find module时,我的IDE(linter,wahtever)会给我import * as myPackage from 'myPackage'

我使用的步骤是

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

如果模块没有打字,你所要做的就是

declare let myPackage:any

为了在TS项目中使用外部包,您需要做些什么吗?或者我错过了重要的一步?

我知道我可以创建一个.d.ts文件,但就目前而言,我希望不用花费所有时间来编写这些文件。

我也一直在阅读有关DefinitelyTyped@types/myPackage的内容,但我对此并不了解......

1 个答案:

答案 0 :(得分:0)

如果包有声明文件

在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中查找所有模块。 externals

  

注意:这假定tsconfig.jsonsuper.onBackPressed();位于同一目录中。适当调整。

一旦您的模块完全写出,如果您想帮助其他人,您可以将此包的PR发送到DefinitelyTyped。