基础认知
让我们带着问题,去寻找答案。
我们的目标是玩烂ts
。
需要一定的 JS 基础,或者后端面向对象语言(JAVA、PHP、C#等都行)的基础
ts 安装与更新
首先我们安装我们的typescript
命令行工具,同样你也可以使用该命令更新版本。
它会给我们安装tsc
这个命令,它是typescript compile
的缩写
婴儿的第一声啼哭
切换到你的工作目录,创建一个nodelover.me
的文件夹,再在文件夹里面创建baby.ts
文件
这段代码非常的简单,声明了一个叫Baby
的类,每次通过new
实例化的时候,会自动调用constructor
方法,也就是小孩的第一声啼哭。
编译ts
文件,你会得到一个js
文件
你需要记住的是,ts 文件是不能直接运行的,能运行的是 js 文件,无论你的 js 文件是运行在浏览器中,或者是 node 环境中,也就是说 ts 的编译器并不关心你编译之后的 js 文件运行在哪。
运行的的baby.js
文件
你会得到这样的显示
哪儿来的 typescript
看看我们的 js
文件
对于很多后端语言的开发者来说,function Baby(){}
就是一个类,这非常令人难以理解,简直就是破坏宇宙的和平。
于是微软公司的员工就想,能不能我也搞一个像coffeescript
这样的,把自己的语言文件编译成js
再运行呢?所以微软为了维护宇宙的正义与和平,创造出了typescript
语言。
因为微软主推的是C#
语言,所以 typescript
的语法,基本上与C#
的差异不大,简直海尔兄弟。
慢慢的js
升级换代了,出了个es6
,微软波澜不惊的抽了根烟,淡淡的说: “好吧,你升级换代了我也不怕,我针对你的es6
,不仅吸收你的新特性,我还可以编译成es6
的样子,分分钟秒杀你。”
所以说在 typescript
里面直接写 es6
语法的 js
基本是没有什么问题的。
于是微软公司的员工又开始想了,写 js
没有代码提示,开发效率简直就是战斗力为五的渣渣,所以 typescript
就沿用了C#
那套代码提示,于是问题来了。
假如我要引入的代码是js
文件而不是ts
文件,那代码提示怎么办?
代码提示的秘密 d.ts
给我们的baby.ts
添加一些代码
代码非常的简单,导出了一个 Baby
类,和一个叫 baby
的 Baby
实例。
Baby
包含一个私有的字段_name
,静态的方法smile
,公开的方法 getBabyName
, 在通过new
调用constructor
的时候,会初始化我们的_name
,而getBabyName
就是拿到我们私有的_name
,之所以需要getBabyName
,是因为通过private
关键字指定的私有字段和方法,在实例中是无法访问的。
再次编译ts
文件,这次我们加上-d
选项
你会发现我们多出了一个baby.d.ts
文件
大多数 ts 初学者会这样问: 请问一下各位,如何在 ts 文件里面,引入已经写好的 js 文件呢?
答案就在这里,d.ts
文件,
我们发现baby.ts
里面所有的方法声明都被导入到了d.ts
文件里面,而我们的 typescript
恰恰就是通过这个d.ts
文件进行代码提示的。
因为我们的ts
文件可以直接通过-d
进行生成,而其他的js
库呢?只有我们自己去看着 API 去写d.ts
文件了。
实验
重命名一下我们的
baby.ts
,把它改成baby.copy.ts
此时我们只剩下baby.js
,baby.d.ts
文件了了。
新建
main.ts
文件当使用
import
导入的时候,webstorm
会自动提示你的baby.d.ts
;
输入
baby
,他会提示你要导入哪一个文件里面的,这里我们选择baby.d.ts
;
完整的代码应该像这样
编译
main.ts
查看并运行
main.js
总结
这一节我们了解了
typescript 的特点
跟好兄弟 C# 类似,是静态类型的,拥有代码提示,ts 并不能运行,只有编译成 js 文件后,运行 js 文件
typescript 的起源
因为后端人员写 js,简直反人类,所以微软搞出了 ts
typescript 代码提示
秘密在于 d.ts 文件
Last updated