TypeScript中文手册
2,变量声明
### 2.1 var 声明 var声明可以在包含它的函数,模块,命名空间或全局作用域内部任何位置被访问,包含它的代码块对此没有什么影响。 有些人称此为var作用域为函数作用域。 函数参数也使用函数作用域。 ### 2.2 let 声明 ##### 2.2.1 块作用域 当用let声明一个变量,它使用的是词法作用域或块作用域。 不同于使用var声明的变量那样可以在包含它们的函数外访问,块作用域变量在包含它们的块或for循环之外是不能访问的。 ##### 2.2.2 重定义及屏蔽 使用var声明时,它不在乎你声明多少次;你只会得到1个。 在一个嵌套作用域里引入一个新名字的行为称做屏蔽。 它是一把双刃剑,它可能会不小心地引入新问题,同时也可能会解决一些错误。 ##### 2.2.3 块级作用域变量的获取 ### 2.3 const 声明 它们与let声明相似,但是就像它的名字所表达的,它们被赋值后不能再改变。 换句话说,它们拥有与let相同的作用域规则,但是不能对它们重新赋值。 ##### 2.3.1 let vs. const - 使用最小特权原则,所有变量除了你计划去修改的都应该使用const。 - 基本原则就是如果一个变量不需要对它写入,那么其它使用这些代码的人也不能够写入它们,并且要思考为什么会需要对这些变量重新赋值。 - 使用const也可以让我们更容易的推测数据的流动。 ### 2.4 解构 ##### 2.4.1 解构数组 ```typescript let input = [1, 2]; let [first, second] = input; //创建了2个命名变量 first 和 second。 相当于使用了索引 let [first, ...rest] = [1, 2, 3, 4]; //使用...语法创建剩余变量 let [first] = [1, 2, 3, 4]; //可以忽略不关心的尾随元素 let [, second, , fourth] = [1, 2, 3, 4]; //忽略不关心的元素 ``` ##### 2.4.2 对象解构 ```typescript let o = { a: "foo", b: 12, c: "bar" }; let { a, b } = o; //通过 o.a and o.b 创建了 a 和 b ,并忽略了c ({ a, b } = { a: "baz", b: 101 }); //可以用没有声明的赋值 let { a, ...passthrough } = o; //使用...语法创建剩余变量 ``` - ###### 1.4.2.1 属性重命名 ```typescript let { a: newName1, b: newName2 } = o; let newName1 = o.a; let newName2 = o.b; let {a, b}: {a: string, b: number} = o; ``` - ###### 1.4.2.1 默认值 ```typescript 默认值可以让你在属性为 undefined 时使用缺省值: function keepWholeObject(wholeObject: { a: string, b?: number }) { let { a, b = 1001 } = wholeObject; } 现在,即使 b 为 undefined , keepWholeObject 函数的变量 wholeObject 的属性 a 和 b 都会有值。 ``` ##### 2.4.3 函数声明 > 解构也能用于函数声明。但不建议使用 ### 2.5 展开 > 展开操作符正与解构相反。 它允许你将一个数组展开为另一个数组,或将一个对象展开为另一个对象。 - **展开数组** ```typescript let first = [1, 2]; let second = [3, 4]; let bothPlus = [0, ...first, ...second, 5]; ``` - **展开对象** ```typescript let defaults = { food: "spicy", price: "$$", ambiance: "noisy" }; let search = { ...defaults, food: "rich" }; ```
顶部
收展
底部
[TOC]
目录
1,基础类型
2,变量声明
3,接口
4,类
5,函数
6,泛型
7,枚举
8,类型推论
9,类型兼容性
10,高级类型
11,符号Symbols
12,Iterators(迭代)
13,模块
14,命名空间
15,模块解析