如何排除TypeScript定义中声明的全局类型?

时间:2018-10-03 06:49:25

标签: javascript node.js typescript react-native

许多库都是为Web,Node服务器和React Native等移动应用程序编写的。因此,可以通过<script />标签,对require()的调用或使用现代的import关键字来包含它们,尤其是在使用Webpack之类的工具或React Native之类的框架时。

因此,他们的TypeScript依赖项通常不仅会使用export关键字,还会在全局名称空间中公开类型。这样一来,代码就可以在浏览器上使用TypeScript并包括使用<script />标签的CDN库,以利用在这些环境中全局可用的类型。

例如jquerybig.js,还有更多的库使用此模式。

在编写现代JavaScript时,但使用的库公开了浏览器的全局类型,那么如何在那些实际上不可用的节点和React Native等环境中将这些类型排除在进入全局命名空间的范围之外?

1 个答案:

答案 0 :(得分:0)

在编译TypeScript代码时,假设您已经安装了使用npm install @types/node @types/jestuse the types flag之类的东西来指定全局包含哪些类型声明。例如,在tsconfig.json中,包含如下代码:

{
  compilerOptions: {
    // ...
    // @types/node and @types/jest will be included globally.
    types: ["node", "jest"],
    // ...
  }
}

这样,TypeScript将仅自动包括那些指定库的声明,包括全局库的声明。其余类型在导入时仍然可以使用-TypeScript在看到您import时会解析这些库-但是通过这种方式,只有您指定的为您的环境提供全局类型的库才可用,从而允许TypeScript编译器可以更可靠地通知您丢失的导入。

感谢Github @googol for the tip on DefinitelyTyped