谈谈 typescript 中 namespace 的理解

在 TypeScript 中,namespace 是一种将代码组织到逻辑组中的方式。它主要用于避免全局命名空间污染,并帮助开发者更好地组织和管理代码。尽管现代 TypeScript 开发中更推荐使用模块(import/export),但在某些场景下(尤其是旧项目或需要兼容性时),namespace 仍然有其用途。

我的理解是, namespace 相当与 模块化的思想,因为那时候 js 的 module 还没有出来,所以 ts 出了这种功能,不过现在随着 js (import/export)的出现,namespace 尽量不要使用了,只是如果在一些以前的项目中看到,可以作为了解。

通过 namespace 我们引用其他文件的方式为 

/// <reference path="路径" />

要主要前面有 三个 ///

下面我举个例子,来看一下代码和应用

我现在在同一目录下有4个文件,分别是 hello.ts,trim.ts,测试.html,tsconfig.json,还有一个文件夹 dist

trim.ts:

namespace Greeter {
  export const value = 'Hello, World!'
}

hello.ts:

/// <reference path="trim.ts" />
namespace Greeter {
  export function trimFun() {
    console.log(`${value}, World!`)
  }
}

Greeter.trimFun()

测试.html:

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>

<body>
	<h1>测试的页面</h1>
	<script src="./dist/bundle.js"></script>
</body>

</html>

tsconfig.json:

{
  "compilerOptions": {
    "module": "none",
    "target": "ES5",
    "outFile": "./dist/bundle.js"
  }
}

之后,我们在当前目录中打开终端,输入 tsc,然后打开html文件

可以看到,我们在 hello.ts 中使用了 trim.ts 中定义的一个 value 值

namespace 使用值得主要的是 
  • export 关键字用于导出命名空间中的成员,使其可以在命名空间外部访问。
  • 如果没有用 export,命名空间中的成员是私有的,无法从外部访问。

下面来说说 Namespace 和 Module 的一些区别:

特性NamespaceModule
文件范围全局范围文件范围
导入/导出机制手动引用 (/// <reference path="..."/>)使用 import/export
推荐使用场景旧项目或小型脚本现代 TypeScript 项目
是否会污染全局命名空间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值