【问题标题】:How do you reference a namespace A in namespace B with TypeScript?如何使用 TypeScript 引用命名空间 B 中的命名空间 A?
【发布时间】:2017-11-20 14:10:20
【问题描述】:

src/models 文件夹中,我有一个很大的枚举列表,我将它们放在命名空间 Enums 中。

枚举.ts

namespace Enums {

    const enum MethodType {
       Equal,
       NotEqual,
       ...
    }

}

src/typings-custom 文件夹中,我有一些使用这些 Enums 的接口(以及其他接口)。

dto.d.ts

/// <reference path="../models/Enums" />

namespace DTO {

    interface IRule {
       MethodType: Enums.MethodType
    }

}

我发现将我的 Enums 命名空间引用到 DTO 命名空间的唯一方法是使用 /// &lt;reference .../&gt; 行。

它仍然是 TypeScript v2.6 良好实践的一部分吗? 还有其他方法吗? (我尝试使用 import 但它需要一个模块而不是命名空间)

谢谢!

【问题讨论】:

    标签: typescript namespaces


    【解决方案1】:

    管理代码的最佳方式是使用模块,而不是命名空间。要记住的一件事是it is best not to mix modules and namespaces in TypeScript

    模块是具有importexport 表达式的任何文件。

    这是Enums.ts 模块:

    export const enum MethodType {
        Equal,
        NotEqual,
     }
    

    以及导入MethodType枚举以供实际使用的示例:

    import { MethodType } from '../models/Enums';
    
    interface IRule {
        MethodType: MethodType
    }
    

    您也可以导入“很多”,但要注意依赖于您不需要的东西:

    import * as Enums from '../models/Enums';
    
    interface IRule {
        MethodType: Enums.MethodType
    }
    

    理想情况下,您可以使用模块加载器加载代码,但如果您想坚持捆绑,也可以使用工具将全部内容打包到一个文件中。

    【讨论】:

      【解决方案2】:

      export namespace Enums {
          const enum MethodType {
             Equal,
             NotEqual,
             ...
          }
      
      }
      
      
      /*-----*/
      
      import * as Enums from './Enums'

      记住最好改名,因为Enums 类似于限制字。

      希望这会有所帮助。

      【讨论】:

      • 1.是的,它有帮助,谢谢! 2. 你确定 Enums(在这种情况下是 Pascal 情况)是一个受限词吗?
      • 有时在提到对象类型时必须使用 Pascal 大小写,best practise 也是如此,以避免使用类似于或等于受限词的词。但是@Fenton 实现比我的这个更合适,所以我建议你使用他的!
      猜你喜欢
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多