首页 >web前端 >js教程 >如何通过 TypeScript 外部模块有效使用命名空间?

如何通过 TypeScript 外部模块有效使用命名空间?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-10 13:39:02414浏览

How Do I Use Namespaces Effectively with TypeScript External Modules?

如何将命名空间与 TypeScript 外部模块一起使用?

问题:

您有使用 TypeScript 外部命名空间的代码模块,但您遇到错误或意外行为。这是您的代码:

// baseTypes.ts
export namespace Living.Things {
  export class Animal {
    move() { /* ... */ }
  }
  export class Plant {
    photosynthesize() { /* ... */ }
  }
}

// dog.ts
import b = require('./baseTypes');

export namespace Living.Things {
  // Error, can't find name 'Animal', ??
  export class Dog extends Animal {
    woof() { }
  }
}

// tree.ts
// Error, can't use the same name twice, ??
import b = require('./baseTypes');
import b = require('./dogs');

namespace Living.Things {
  // Why do I have to write b.Living.Things.Plant instead of b.Plant??
  class Tree extends b.Living.Things.Plant {
  }
}

糖果杯类比:

想象一下在纸上整理糖果。如果每张纸都是一个单独的模块,那么在每张纸上创建一个标有“A”的杯子并没有什么帮助——这就像创建额外的步骤而没有实际组织糖果一样。

无杯子:

不要使用命名空间,请考虑像这样编写代码:

// Mod1.ts
export class Twix { ... }

// Mod2.ts
export class PeanutButterCup { ... }

// Mod3.ts
export class KitKat { ... }

这会创建一个更简单的结构,而无需需要不必要的命名空间。

命名空间不适合模块的原因:

  • 组织:文件系统组织解决了这一需求。
  • 名称冲突:由于对象具有唯一名称,因此模块内不会出现此问题。

外部模块指南:

  • 导出为接近顶级尽可能。
  • 对单个导出使用导出默认值。
  • 将多个导出放在顶级。
  • 仅将模块/命名空间用于大型导出。

危险信号:

  • 顶级导出module Foo { ... }.
  • 未导出的单个导出类/函数默认值。
  • 具有相同导出模块 Foo { ... } 的多个文件。

以上是如何通过 TypeScript 外部模块有效使用命名空间?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn