[TypeScript][文档]变量
一、var、let、const比较
对于var和let:
var作用域为函数作用域,而let为块作用域
const为只能被赋值一次的let类型
二、解构
解构类似于将结构相同的两个数据做一一对应的赋值或类型声明,例如:
// 解构数组 let input = [1, 2]; let [first, second] = input; // 也可以这样写 [first, second] = [second, first]; // 或者用来声明类型而不是赋值 [first, second]: [number, number]
【注】:对于对象的解构,不像数组一样按照顺序一一赋值,数组可以不按照顺序赋值,但是左边变量名称要是对象的元素名称
let o = { a: "foo", b: 12, c: "bar" }; let { a, b } = o; // 如果写 let {x,y} = o则报错,因为对象o里面没有x,y元素 // 如果写 let {c,b} = o 也可以,而且值分别对应o.c 和 o.b
对象解构时,也可以给左边的变量重命名
let { a: newName1, b: newName2 } = o;
这时候,如果还想要指定类型,需要在后面写完整模式:
let {a, b}: {a: string, b: number} = o;
缺省值和默认值
function keepWholeObject(wholeObject: { a: string, b?: number }) { let { a, b = 1001 } = wholeObject; } // 这里 b?:number 表示 b 是 number 类型的值,并且 b 允许缺省 // 所以, 使用 b=1001给 b 指定默认值, 当 b=undefined 时,给 b 赋值默认值
三、展开
数组展开:
let first = [1, 2]; let second = [3, 4]; let bothPlus = [0, ...first, ...second, 5];
对象展开:对于对象展开,后面的同名属性会覆盖前面的属性
let defaults = { food: "spicy", price: "$$", ambiance: "noisy" }; let search = { ...defaults, food: "rich" }; // 值为 { food: "rich", price: "$$", ambiance: "noisy" }
【注】:展开一个对象后,你会丢失其方法