【问题标题】:How do you exclude global types declared in TypeScript definitions?如何排除 TypeScript 定义中声明的全局类型?
【发布时间】:2019-03-08 08:10:40
【问题描述】:

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

因此,它们的 TypeScript 依赖项通常不仅会使用 export 关键字公开类型,还会在全局命名空间中公开类型。这允许在浏览器上使用 TypeScript 的代码并包含可能来自 CDN 的库,使用 <script /> 标签来使用在这些环境中全局可用的类型。

例如,jquerybig.js 以及更多的库都使用这种模式。

当您编写现代 JavaScript 但使用为浏览器案例公开全局类型的库时,如何在 Node 和 React Native 等实际不可用的环境中排除这些类型进入全局命名空间?

【问题讨论】:

    标签: javascript node.js typescript react-native


    【解决方案1】:

    在编译 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

    【讨论】:

    • 这对我不起作用。至少对于 big.js。无论类型有什么值,Big 都包含在全局范围内。
    • 嗯,是的,我现在也遇到了这个问题,我很困惑。当我删除/添加它时,它为jest 工作,但我现在遇到了大动作。
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 2015-07-25
    • 2019-09-29
    • 1970-01-01
    • 2019-04-02
    • 2021-08-23
    相关资源
    最近更新 更多