【问题标题】:How to use a typing which provides an external module as global?如何使用提供外部模块作为全局的类型?
【发布时间】:2021-04-26 03:58:38
【问题描述】:

我们有一个大型 TS 应用程序,大部分是在 2.0 之前编写的。我们不使用模块,而只使用outfile 选项。到目前为止,我们一直在使用 global 类型,但现在 typings 提供的一些类型不支持全局使用(据我了解)。

例如,我现在尝试使用 markdown-it 的类型,它不会向全局命名空间公开任何内容,因此编译器找不到 markdownit 函数。

我很困惑在这种情况下我们应该如何使用这些类型,任何提示都将不胜感激。

示例代码:

// test.ts
var result = markdownit().render("*some markdown*"); <-- `markdownit` not found

当我尝试import 它时,它当然会出错,因为我没有使用模块。所以我被卡住了。

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:

    假设你真的想使用markdown-it作为全局变量markdownit,你可以在你自己的文件中声明它augments global scope(这个特性是2.0的新特性)。

    创建文件markdown-it-global.d.ts

    declare module 'markdown-it-global' {
    
        import * as MarkdownIt from 'markdown-it';
    
        global {
            var markdownit: typeof MarkdownIt;
        }
    
    }
    

    这声明了一个扩大全局范围的环境模块 - 如果您将markdown-it-global.d.ts 与所有其他类型csript 源文件和声明(如typing/index.d.ts)一起包含,它将使全局变量markdownit 在任何地方都可用。

    其中的import 使用markdown-it 类型来声明一个模块,但它只会用于类型检查,它不会对生成的javascript 代码产生任何影响,并且实际上并不要求它使用模块。

    【讨论】:

    • 我真的很想这样使用它,因为我别无选择。我们有数千行没有使用模块编写,转换它是一项我们负担不起的艰苦工作。在一个新项目中,我肯定会使用模块。谢谢你的回答,明天试试。
    猜你喜欢
    • 2015-06-16
    • 2019-08-15
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2020-06-27
    • 2019-09-03
    • 2017-01-13
    相关资源
    最近更新 更多