TypeScript从入门到精通(二十二)namespace命名空间(上)

之前我们的TS效果是在控制台终端输出的,现在我们新建一个简单的项目,让我们的ts在项目中运行

搭建最基础的TS开发环境:
  1. 建立好文件夹后,打开 VSCode,把文件夹拉到编辑器当中,然后打开终端,运行npm init -y,创建package.json文件。
  2. 生成文件后,我们接着在终端中运行tsc -init,生成tsconfig.json文件。
  3. 新建srcbuild文件夹,再建一个index.html文件。
  4. src目录下,新建一个page.ts文件,这就是我们要编写的ts文件了。
  5. 配置tsconfig.json文件,设置outDirrootDir,也就是设置需要编译的文件目录,和编译好的文件目录。
  6. 然后编写index.html,引入<script src="./build/page.js"></script>,当让我们现在还没有page.js文件。
  7. 编写page.ts文件,加入一句输出console.log('哈哈小猿'),再在控制台输入tsc,就会生成page.js文件
  8. 再到浏览器中查看index.html文件,如果按F12可以看到哈哈小猿,说明我们的搭建正常了。
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <script src="./build/page.js"></script>
    <title>Document</title>
  </head>
  <body></body>
</html>

在这里插入图片描述
上面就是开发最基础的前端项目时需要作的环境配置(在做项目,尽量使用TypeScript来进行编写)

没有命名空间时的问题:

为了更好的理解,先写一下这样代码,用类的形式在index.html中实现header,content和Footer部分,类似我们常说的模板。

page.ts文件里,写出下面的代码:

class Header {
  constructor() {
    const elem = document.createElement("div");
    elem.innerText = "This is Header";
    document.body.appendChild(elem);
  }
}

class Content {
  constructor() {
    const elem = document.createElement("div");
    elem.innerText = "This is Content";
    document.body.appendChild(elem);
  }
}

class Footer {
  constructor() {
    const elem = document.createElement("div");
    elem.innerText = "This is Footer";
    document.body.appendChild(elem);
  }
}

class Page {
  constructor() {
    new Header();
    new Content();
    new Footer();
  }
}

写完后我们用tsc进行编译一次,然后修改index.html文件,在标签里引入

<body>
  <script>new Page();</script>
</body>

上面的代码看起来是没有任何问题的
但是你打开page.js文件你会发现里面的变量全是全局变量,都是用var声明的。
过多的全局变量使得我们的项目变得沉重复杂,代码变得不可维护

我们理想的状态是只要一个Page的全局变量就行了,其他的可以模块化封装起来,不能暴露到全局里面。
所以就可以使用我们的命名空间了

命名空间的使用:

命名空间声明关键词:namespace
例如:声明一个namespace Home,需要暴露出去的类,可以使用export关键词,这样只有暴漏出去的类是全局的,其他的不会再生成全局污染了,代码如下:

namespace Home {
  class Header {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Header";
      document.body.appendChild(elem);
    }
  }

  class Content {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Content";
      document.body.appendChild(elem);
    }
  }

  class Footer {
    constructor() {
      const elem = document.createElement("div");
      elem.innerText = "This is Footer";
      document.body.appendChild(elem);
    }
  }

  export class Page {
    constructor() {
      new Header();
      new Content();
      new Footer();
    }
  }
}

TS 代码写完后,再到index.html文件中进行修改,用命名空间的形式进行调用。 写完后,用tsc编译一下,也可以使用tsc -w进行监视了,只要有改变就会进行重新编译。

这就是 TypeScript 给我们提供的类似模块化开发的语法,它的好处就是让全局变量减少了很多,实现了基本的封装,减少了全局变量的污染。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值