这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
1.在浏览器下运行ts
文件:
目录树如下:
-
新建文件夹
mytscode
文件夹,输入npm init -y
-
运行
tsc -init
,文件夹中多出tsconfig.json
文件 -
mytscode文件夹下新建
src
和dist
目录 -
src
中新建一个page.ts
文件console.log("我是page.ts");
-
将
tsconfig.json
文件中输入
和输出
路径修改如下:"outDir": "./dist", "rootDir": "./src",
-
最外层创建一个
index.html
文件<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ts代码</title> </head> <body> <script src="./dist/page.js"></script> </body> </html>
-
终端执行
tsc
后,浏览器打开index.html
,观看控制台
2.命名空间:
1.例子:
- 修改
page.ts
中的代码 - 可以通过
tsc -w
开启监听模式,这样修改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();
}
}
index.html
代码中的修改
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>ts代码</title>
</head>
<body>
<script src="./dist/page.js"></script>
<script>
new Page();
</script>
</body>
</html>
- 执行
tsc
后打开index.html
页面如下图:
2.编译后的page.js文件
下面代码为编译后的page.js代码:
"use strict";
var Header = /** @class */ (function () {
function Header() {
var elem = document.createElement('div');
elem.innerText = 'This is Header';
document.body.appendChild(elem);
}
return Header;
}());
var Content = /** @class */ (function () {
function Content() {
var elem = document.createElement('div');
elem.innerText = 'This is Content';
document.body.appendChild(elem);
}
return Content;
}());
var Footer = /** @class */ (function () {
function Footer() {
var elem = document.createElement('div');
elem.innerText = 'This is Footer';
document.body.appendChild(elem);
}
return Footer;
}());
var Page = /** @class */ (function () {
function Page() {
new Header();
new Content();
new Footer();
}
return Page;
}());
这些Header、Content、Footer等类
编译后成为了全局变量,过多的全局变量会造成变量污染
,从而引发莫名其妙的问题,由此引出了命名空间
,使上述问题优化,减少全局变量的存在。
修改page.ts
文件代码为:
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
中的new Page()
需要修改为new Home.Page()
3.多个文件之间的命名空间:
文件夹目录树🌲如下:
mytscode
├─ dist
│ └─ page.js
├─ src
│ ├─ components.ts
│ └─ page.ts
├─ index.html
├─ package.json
└─ tsconfig.json
page.ts
///<reference path="components.ts" />
用来说明Home
命名空间依赖于components.ts
文件,阐述了两者之间的依赖关系。Kobe
是Home
命名空间的子命名
空间,命名空间
下也是可以创建子空间
的
// page.ts
///<reference path="components.ts" />
namespace Home {
export namespace Kobe {
export const NBAPlayer: Components.user = {
name: '科比.布莱恩特'
};
}
export class Page {
constructor() {
new Components.Header();
new Components.Content();
new Components.Footer();
}
}
}
- 被
page.ts
作为依赖的components.ts
代码如下:components
命名空间下导出了: - user接口
- Header类
- content类
- Footer类
namespace Components {
// Components中的命名空间
export interface user {
name: string;
}
export class Header {
//略 内容同上
}
export class Content {
//略 内容同上
}
export class Footer {
//略 内容同上
}
}