【问题标题】:Declaring global functions in a TypeScript module在 TypeScript 模块中声明全局函数
【发布时间】:2017-12-25 20:13:23
【问题描述】:

我在index.html 函数中定义了一组普通的 JS 函数。我想声明这些函数以便能够在 TypeScript 文件中使用它们。我就是这样做的:

declare function getHtmlBasePath(): String;
declare function fbFetchedLoginStatus(): boolean;
declare function getFbAccessToken(): String;
declare function setFbAccessToken(token: String);

但是,为了避免在每个使用它们的 TypeScript 文件中声明这些文件,我想在一个单独的文件中定义它们并将该文件导入到我想要的任何位置。这样一来,我就取消了重复声明,并且如果我以后想进行重构,我也得到了 IDE 的支持。但是,当我在 TypeScript 文件中定义这些声明并导入它们时,TypeScript 编译器将假定这是一个实际上必须导入的模块,而它只是一个声明文件(更像是外部库的头文件在 C/C++ 中)。

有没有办法让某个 TypeScript 除了一组声明之外没有其他用途,即当你导入它时,TypeScript 编译器不会生成 require 语句?

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:

    使用export关键字将函数定义导出到单独的文件中:

    export function getHtmlBasePath(): String {
        // your code
    }
    

    要在任何其他打字稿文件中使用该函数,只需使用 import 关键字导入该函数。

    import {getHtmlBasePath} from 'filename';
    

    filename 是写入函数定义的文件的名称。导入函数后,您可以像使用任何其他普通函数一样使用该函数。

    【讨论】:

    • 这实际上是我所做的,但 TypeScript 编译器最终将函数声明视为函数并将模块名称附加到函数名称中,而我想要的实际上只是一种方法TypeScript 编译器识别此函数是全局定义的。
    【解决方案2】:

    TypeScript 编译器足够聪明,不会将这些声明转换为 require 语句。事实上,它们都不会出现在您编译的 JavaScript 代码中。

    【讨论】:

    • 谢谢,但情况似乎并非如此,因为我看到为 globals 模块添加了一个依赖项。
    猜你喜欢
    • 2019-01-04
    • 2016-05-19
    • 2015-07-25
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2014-12-30
    相关资源
    最近更新 更多