TypeScript 变量声明

var

一直以来我们都是通过 var 关键字定义 JavaScript 变量,但是它作用域规则不明确,不推荐使用

let

var 代替写法。当用 let 声明一个变量,它使用的是词法作用域或块作用域

const

const 声明是声明变量的另一种方式。它与 let 声明相似,但是就像它的名字所表达的,它们被赋值后不能再改变。 换句话说,它们拥有与 let 相同的作用域规则,但是不能对它们重新赋值。

解构

  • 解构数组
let input = [1, 2];
let [first, second] = input;
console.log(first); // outputs 1
console.log(second); // outputs 2

这创建了 2 个命名变量 first 和 second。 相当于使用了索引,但更为方便:

first = input[0];
second = input[1];
  • 对象解构
let o = {
    a: "foo",
    b: 12,
    c: "bar"
};
let { a, b } = o;
  • 属性重命名
let { a: newName1, b: newName2 } = o;

展开

展开操作符正与解构相反。 它允许你将一个数组展开为另一个数组,或将一个对象展开为另一个对象

let first = [1, 2];
let second = [3, 4];
let bothPlus = [0, ...first, ...second, 5];
console.log(bothPlus)//[0, 1, 2, 3, 4, 5]

还可以展开对象.像数组展开一样,它是从左至右进行处理,但结果仍为对象。 这就意味着出现在展开对象后面的属性会覆盖前面的属性。

let defaults = { food: "spicy", price: "$$", ambiance: "noisy" };

let search1 = { ...defaults, food: "rich" };
console.log(search1)//search1的值为{ food: "rich", price: "$$", ambiance: "noisy" }

let search2 = { food: "rich", ...defaults };
console.log(search2)//search2的值为{ food: "spicy", price: "$$", ambiance: "noisy" }

但是展开一个对象实例时,你会丢失其方法:

class C {
  p = 12;
  m() {
  }
}
let c = new C();
let clone = { ...c };
clone.p; // ok
clone.m(); // error!