【问题标题】:How to separate classes and interfaces into separate files under the same namespace in Typescript如何在Typescript中将类和接口分离到同一命名空间下的单独文件中
【发布时间】:2020-06-26 14:46:30
【问题描述】:

这是一个关于命名空间和文件管理的 Typescript 问题。我在一个命名空间下有许多接口和类。我想将每个类或接口分割成它自己的.ts 文件,然后能够聚合这些文件,这样我就可以在一些使用代码中声明命名空间,然后可以访问命名空间中的接口和类。比如第一个文件icontact.ts

export namespace mynamespace {
  export interface IContact {
    firstName: string;
    lastName: string;
  }
}

第二个文件,contact.ts:

import {IContact} from './icontact.ts';
export namespace mynamespace {
  export class Contact implements IContact {
    firstName: string;
    lastName: string;
    constructor(firstName: string, lastName: string){
      this.firstName = firstName;
      this.lastName = lastName:
    } 
  }
}

我将非常感谢任何人提供的任何帮助。

提前致谢。

【问题讨论】:

    标签: typescript namespaces


    【解决方案1】:

    Typescript 中的命名空间是一种描述模块结构的方式,但它们不会生成任何自动为您执行此操作的代码。

    您可能想要做的是创建一个文件(可能是某个目录中的index.ts),然后从该文件中导入您想要的“命名空间”中的所有内容,然后重新导出。

    这种index.ts 文件的示例:

    export { Foo } from './foo';
    export { Bar } from './bar';
    

    现在如果有东西使用这个模块,他们可以这样引用它:

    import * as MyNamespace from './some/directory';
    
    let foo: MyNamespace.Foo;
    let bar: MyNamespace.Bar;
    

    【讨论】:

    • 请告诉我,./foo.ts.bar.ts 的每个文件的内容是否包含命名空间声明? Of 是 import * as MyNamespace from "./some/directory"; 所隐含的命名空间吗?
    • 感谢您抽出宝贵时间关注我的问题!
    • 我的意思是,或者是import * as MyNamespace from "./some/directory";所暗示的命名空间?
    • @reselbob 与 Java 或 PHP 等语言不同,javascript 中没有真正的全局命名空间。 Typescript 命名空间实际上只是用名称描述对象。所以不,命名空间隐含在您导入事物的方式中。
    • 谢谢。我刚刚阅读了打字稿docs。看起来事情就像你描述的那样。可悲的是,我的风格是为我制作的每个构造都专门创建一个文件。因此,我对用于组织目的的命名空间感兴趣。
    猜你喜欢
    • 2012-12-04
    • 2019-03-18
    • 1970-01-01
    • 2021-07-02
    • 2017-02-16
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多