Lec 0 TypeScript 基础
[toc]
本节Lec目标是
- 学习基本的JS和TS的语法和语义
- 从写Python转换到写TS
1. 运行时快照图
为了理解微妙问题,画图我们来说很有用,图反映了运行时系统发生了什么。快照图(Snapshot diagrams)代表了程序运行时的内部状态——帧栈 和 堆
这是我们需要快照图的原因:
- 与其他人交流
- 阐述诸如 不变量(immutable values) 与 不可重新赋值的引用(unreassignable references)、指针别名、堆与栈、抽象和具体表示等等
- 为后续课程更丰富的设计符号奠定基础。
即便课程的图是来自TS,但是在符号可以应用在任何现代编程语言,e.g. Python、Java、C++、Ruby。
最简单的例子就是两个指向常数的变量:
ts
let n: number = 1;
let x: number = 3.5;
当我们想展示值的类型,或者更多内部结构细节,可以用其类型名的圆形标签框住

快照图目的是为了灵活性,没必要一直展示所有细节可以简化。比如
ts
let s: string ="hello"
2. 可变值 vs. 可重新赋值变量
快照图使得可以可视化 改变一个变量 和改变一个值的区别:
- 当你复制给一个变量或者域,你在改变变量的指针,你能指向不同值
- 当时在改变一个可变对象的内容时——比如数组——你正在改变值内部的引用;
2.1 重新赋值 和 不可变值
比如我们有 string 变量 s,我们可以将其重新指派,从"a"到"ab"
ts
let s: string = "a";
s = s + "b"
sting 是不可变类型,当被创建后就不可更改其值;不可变性也是这门课的主要设计。
2.2 可变值
相反,数组就是可变独享,它有方法能够改变这个对象的值
ts
let arr: Array<string> = ["a"];
arr.push("b");可变性和不可变性的区别能让我们代码从安全变成bugs。

2.3 不可重新赋值引用
TS 还有 不可变性的引用: 变量被赋值一次,且不能再重新赋值。为了一个引用不可变,从const关键字让其使然。
ts
const n:number = 5;在快照图中,我们用双箭头表示不可重新赋值引用。我们可以将不可重新赋值引用指向可可变值。
ts
const arr: Array<string> = ["a"]
arr.push("B")