[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" }

【注】:展开一个对象后,你会丢失其方法

 

posted @ 2018-12-13 15:12  麦田里的小王子  阅读(168)  评论(0编辑  收藏  举报