【问题标题】:Import stuff from TypeScripd declaration file with only "declare module" top level declarations从 TypeScripd 声明文件中导入只有“声明模块”顶级声明的东西
【发布时间】:2017-09-25 01:14:32
【问题描述】:

我有一个 TypeScript 文件 foo.d.ts。它包含很多“声明模块”结构,仅此而已:

declare module Foo {
}

declare module Fun {
}

代码是由 Bridge.NET 自动生成的,所以我不能修改它(实际上我可以。但这不是一个好看的解决方案)。

如果文件在另一个文件中以import * as bridge from "./foo"; 引用,则 tsc 会说“文件 foo.d.ts 不是模块”。我做错了什么?

如果我编辑生成的文件 (foo.d.ts) 并在其末尾添加虚拟顶级导出 (export interface Fix {}),问题就会消失。

【问题讨论】:

    标签: typescript module bridge.net


    【解决方案1】:

    您遇到错误的原因是您的 foo.d.ts 实际上不是一个模块,而是一个脚本。但是 import 语句应该只用于模块。当您添加 export interface Fix {} 时,这会将文件转换为模块,这就是错误消失的原因。

    通用规则非常简单,如果至少有一个顶级实体(类/接口/变量..)包含 export 修饰符,TypeScript 编译器会将文件视为模块。否则,文件将像脚本一样被处理。

    如果你真的不需要 foo.d.ts 作为一个模块,你可以使用下面的指令来引用它。在这种情况下,文件中声明的所有实体都将是全局可用的。

    /// <reference path="foo.d.ts" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-04
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多