TS学习笔记(十):命名空间

在确保我们创建的变量不会泄露至全局变量中,我们以前曾采用过这种代码组织形式:


   
   
  1. ( function(someObj){
  2. someObj.age = 18;
  3. })(someObj || someObj = {});
  4. 复制代码

但在基于文件模块的项目中,我们无须担心这一点,此种方式,适合用于合理的函数逻辑分组中,在 TypeScript 中,提供了 namespace 关键字来描述这种分组,在 typescript 编译器进行编译过后,命名空间也就被编译成了上述示例那样的代码。

命名空间的声明

TypeScript 的命名空间只对外暴露需要在外部访问的对象,命名空间内的对象通过 export 关键字对外暴露,比如我们在一个名叫 utils.ts 的文件里声明一个命名空间:


   
   
  1. // utils.ts
  2. namespace Utils {
  3. export interface IPerson {
  4. name: string;
  5. age: number;
  6. }
  7. }
  8. 复制代码

命名空间的使用

通过 namespace 关键字声明命名空间,在命名空间外部需要通过完全限定名访问这些对象,通常情况下,声明的命名空间代码和调用的代码不在同一个文件里,因此在其他文件中使用,注意引入的路径要写正确,此处我们在同级目录中任意一个 ts 文件中使用我们刚定义的命名空间:


   
   
  1. /// <reference path="utils.ts" />
  2. const me: Utils.IPerson = {
  3. name: 'funlee',
  4. age: 18
  5. }
  6. console.log(me); // {name: 'funlee', age: 18}
  7. 复制代码

如上述代码所示,通过 reference 注释引用命名空间,即可通过完全限定名进行访问,我们也可以通过 import 导入模块的形式,引入命名空间:


   
   
  1. import './utils'
  2. const me: Utils.IPerson = {
  3. name: 'funlee',
  4. age: 18
  5. }
  6. console.log(me); // {name: 'funlee', age: 18}
  7. 复制代码

多文件的命名空间

就像普通的 JS 模块文件可以相互引用一样,包含 namespace 的命名空间文件也可以相互引入,还可以组合成一个更大的命名空间,下面是一个简单的示例,所有文件都在同一目录下,你也可参考官方示例:

utils.ts


   
   
  1. namespace Utils {
  2. export interface IAnimal {
  3. name: string;
  4. say(): void;
  5. }
  6. }
  7. 复制代码

animal.ts


   
   
  1. /// <reference path="utils.ts" />
  2. export namespace Animal {
  3. export class Dog implements Utils.IAnimal{
  4. name: string;
  5. constructor( theName: string) {
  6. this.name = theName;
  7. }
  8. say() {
  9. console.log( `${this.name}: 汪汪汪`)
  10. }
  11. }
  12. }
  13. 复制代码

index.ts


   
   
  1. import {Animal} from './animal';
  2. const he = new Animal.Dog( 'Jack');
  3. he.say(); // Jack: 汪汪汪
  4. 复制代码
好的,让我来回答你关于 TypeScript 中 Symbol 和模块的问题。 首先,Symbol 是 TypeScript 中的一种新的基本数据类型,它可以用来创建唯一的标识符。在 TypeScript 中,Symbol 主要有两种用法: 1. 作为对象属性的键值,用来表示一个对象属性的唯一标识符。 2. 作为一个类的静态属性或方法,用来表示该类的唯一标识符。 下面是一个使用 Symbol 作为对象属性键值的示例: ```typescript const key = Symbol('myKey'); const obj = { [key]: 'value' }; console.log(obj[key]); // 输出'value' ``` 在上面的代码中,我们使用 Symbol('myKey') 创建了一个新的 Symbol,然后将该 Symbol 作为对象 obj 的属性键值,并赋值为'value'。最后,我们通过 obj[key] 的方式来访问该属性,并输出了'value'。 另外,模块是 TypeScript 中的另一个重要概念,它用来组织和管理代码。在 TypeScript 中,模块可以使用 import 和 export 命令来进行导入和导出。下面是一个使用模块的示例: ```typescript // moduleA.ts export const num = 123; // moduleB.ts import { num } from './moduleA'; console.log(num); // 输出123 ``` 在上面的代码中,我们定义了一个名为 num 的常量,并将其导出。然后,在另一个模块中,我们使用 import 命令将 num 导入,并通过 console.log 输出了它的值。 这就是关于 TypeScript 中 Symbol 和模块的简单介绍,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值