【问题标题】:Reference declaration file (.d.ts) in a .ts file, with compiler "module" option set to none.ts 文件中的引用声明文件 (.d.ts),编译器“模块”选项设置为无
【发布时间】:2019-11-08 12:21:44
【问题描述】:

我已经使用 TS 设置了一个 ASP.net 核心 MVC 项目。我想在不使用任何模块系统的情况下使用 TS。只需“清理”编译的 TS=>JS。

我面临的问题是,如果不使用“import”,我无法在 .ts 文件中引用声明文件 (.d.ts)。

如果我确实使用“导入”代码完成和类型检查工作,但因为我已将项目配置为不使用任何“模块”系统,编译器会抱怨说:“无法使用导入、导出或模块扩充“--module”是“无”

我已经尝试过使用三斜杠指令Triple-Slash Directivesusing @types, typeRoots and types in tsconfig.json files ,但没有成功。

VS2017(与 VS Code 相同)似乎无法解析引用的文件。

我已经建立了一个初步的项目来演示这个问题 https://github.com/gtrifidis/Asp.netCoreTypescriptDemo/tree/master/TypeScriptDemo

任何帮助/想法将不胜感激。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    问题不在于 TypeScript 找不到您的 d.ts 文件,而是因为在您的情况下,i18next 的文件 index.d.ts 是以模块方式编写的,并且应该仅用于import。幸运的是,很容易解决这个问题;你所要做的就是去 index.d.ts 并删除最后一行:

    ....
    declare const i18next: i18next.i18n;
    export = i18next; // <- remove this line
    

    然后您可以继续删除 LocalizationTest.ts 中的 import,它会正常编译。

    更新

    或者,正如@AluanHaddad 所说,您应该提交一个添加新行的 PR,而不是删除它并创建自己的定义:

    ....
    declare const i18next: i18next.i18n;
    export = i18next;
    export as namespace i18next; // <- add this instead
    

    【讨论】:

    • 这是对的,但有两点需要注意。 1:npm 包现在带有自己的类型定义(按照您描述的方式仍然是错误的)。 2:作为该包的一部分分发了一个 UMD 捆绑包,允许您将其用作全局,但类型声明不反映这一点。因此,正确的解决方法是提交使用 UMD 样式声明语法的 PR,因此,不要删除 export 子句,而是添加 export as namespace i18next;
    • @AluanHaddad 和 Mu-Tsun-Tsai 感谢您的帮助。这是拉取请求PR 仅供参考,以防您感兴趣。
    猜你喜欢
    • 2015-11-22
    • 2019-06-21
    • 2019-01-07
    • 2019-07-12
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2020-12-04
    相关资源
    最近更新 更多