Skip to content

Commit 5697b72

Browse files
committed
什么是 TypeScript
1 parent 84bf497 commit 5697b72

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

introduction/what-is-typescript.md

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,60 @@
11
# 什么是 TypeScript
22

3+
> Typed JavaScript at Any Scale.
4+
> 类型化的 JavaScript,适用于各种规模的项目。
5+
6+
以上描述是[官网][TypeScript]对于 TypeScript 的定义。
7+
8+
它强调了 TypeScript 的两个最重要的特性——类型系统、适用于各种规模。
9+
10+
## TypeScript 的特性
11+
12+
### 类型系统
13+
14+
从 TypeScript 的名字就可以看出来,「类型」是其最核心的特性。
15+
16+
我们知道,JavaScript 是一门非常灵活的编程语言:
17+
18+
- 它没有类型约束,一个变量可能初始化时是字符串,过一会儿又被赋值为数字。
19+
- 由于隐式类型转换的存在,有时候变量的类型很难在运行之前就确定。
20+
- 基于原型的面向对象编程,使得原型上的属性或方法可以在运行时被修改。
21+
- [函数是 JavaScript 中的一等公民](https://llh911001.gitbooks.io/mostly-adequate-guide-chinese/content/ch2.html),可以赋值给变量,也可以当作参数或返回值。
22+
23+
这种灵活性就像一把双刃剑,一方面使得 JavaScript 蓬勃发展,无所不能,从 2013 年开始就一直蝉联[最普遍使用的编程语言排行榜](https://insights.stackoverflow.com/survey/2020)冠军;另一方面也使得它的代码质量参次不起,维护成本高,运行时错误多。
24+
25+
而 TypeScript 的类型系统,在很大程度上弥补了 JavaScript 的缺点。
26+
27+
#### 静态类型
28+
29+
类型系统按照类型检查的时机分类,可以分为动态类型和静态类型。
30+
31+
动态类型是指在运行时才会进行类型检查,类型错误会导致运行时的错误。JavaScript 是动态类型,因为缺少了编译期,所以这段代码在运行时才会报错:
32+
33+
```js
34+
let foo = 1;
35+
foo.split(' ');
36+
// 运行时会报错,造成线上 bug
37+
// Uncaught TypeError: foo.split is not a function
38+
```
39+
40+
静态类型是指编译期间就能确定每个变量的类型,类型错误会导致语法错误。TypeScript 是静态类型,上面那段代码在 TypeScript 的编译过程中就会报错了:
41+
42+
```ts
43+
let foo = 1;
44+
foo.split(' ');
45+
// 编译时会报错,无法通过编译
46+
// Property 'split' does not exist on type 'number'.
47+
```
48+
49+
#### 弱类型
50+
51+
52+
53+
54+
## 为什么要用 TypeScript
55+
56+
## TypeScript 的发展历史
57+
358
首先,我对 TypeScript 的理解如下:
459

560
[TypeScript][] 是 JavaScript 的一个超集,主要提供了**类型系统****对 ES6 的支持**,它由 Microsoft 开发,代码[开源于 GitHub](https://github.com/Microsoft/TypeScript) 上。

0 commit comments

Comments
 (0)