什么是全局命名空间?

我们知道命名空间:

namespace AAA {
  export const aaa = "a"
}

namespace BBB {
  export const bbb = "b"
}


console.log(AAA.aaa)
console.log(BBB.bbb)

但是什么是全局命名空间呢?

阅读 1.5k
2 个回答
新手上路,请多包涵

在 TypeScript 中,命名空间是一种将相关联的代码封装起来以避免和全局范围内的其他代码发生命名冲突的技术。

全局命名空间是一种特殊类型的命名空间,在 TypeScript 中被称为 global namespace。这是一个固定名称的命名空间,它可以在任何地方访问,并且可以包含任何数量的变量、接口、函数等内容。通常情况下,使用全局命名空间可能会导致与其他第三方库或模块产生冲突,因此不建议在项目中过多地使用全局命名空间。

在声明全局命名空间时,需要使用 namespace 关键字加上命名空间名称,例如:

// 定义一个全局命名空间 MyNamespace
namespace MyNamespace {
  export const name: string = 'myname';
  export function log(text: string) {
    console.log(`[${name}] ${text}`);
  }
}

然后可以在任何地方使用 MyNamespace 命名空间中定义的变量和函数:

console.log(MyNamespace.name);  // 输出:'myname'
MyNamespace.log('hello');       // 输出:'[myname] hello'

与全局命名空间不同,局部命名空间只能在特定的作用域中访问,即只能在声明命名空间的函数、类或模块内部使用。

在声明局部命名空间时,需要使用 namespace 关键字加上命名空间名称,并且将其放置在包含它的函数、类或模块中。例如:

function MyFunction() {
  namespace MyNamespace {
    export const name: string = 'myname';
    export function log(text: string) {
      console.log(`[${name}] ${text}`);
    }
  }

  // 在函数内部可以访问 MyNamespace 命名空间中定义的变量和函数
  console.log(MyNamespace.name);
  MyNamespace.log('hello');
}

// 在函数外部无法访问 MyNamespace 命名空间
console.log(MyNamespace);  // 报错:Cannot find name 'MyNamespace'

需要注意的是,在实际项目中,建议使用模块化组织代码,而不是过多地使用命名空间。因为命名空间会增加代码的复杂性,并可能导致命名冲突等问题。

你是不是在说全局变量,
创建一个UUU.d.ts文件(当然了,理论上名字可以随便起):

declare var UUU:any
这样就创建了一个全局变量UUU。

https://juejin.cn/post/6898710177969602574
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏