banner
banner
banner
NEWS LETTER

TS-变量声明

Scroll down

var

  1. 存在变量提升
  2. 同一变量重复声明多次只拿到一个结果
  3. 可以在包含它的函数、模块、命名空间、全局作用域内部任何位置被访问

let 和 const

  1. 都有块级作用域
  2. 一个作用域内只能声明一次
  3. 不能在被声明之前读或写
  4. 直到声明前的区域都属于暂时性死区
    • 使用最小特权原则,所有变量除了计划去修改的都应该使用const

type 类型别名

  • type Second = number,给number这个类型命名为second,而second引用这个类型

数组解构:一一对应

  • let [, second, , fourth] = [1, 2, 3, 4]
  • 使用…语法创建剩余变量:
    1
    2
    let [first, ...rest] = [1, 2, 3, 4];
    console.log(first,rest); // 1, [ 2, 3, 4 ]

对象解构:一一对应

1
2
3
4
5
6
7
8
9
10
let o = {
a: "foo",
b: 12,
c: "bar"
}
let { a, b } = o // 直接解构对象

({ a, b } = { a: "baz", b: 101 }) // 没有声明的赋值,要加()

let { a, ...passthrough } = o // ...语法创建剩余变量

属性重命名

1
2
3
4
5
6
let { a: newName1, b: newName2 } = o // 从左到右读,a重命名为newName1
let o = {
a: "foo",
b: 12,
c: "bar"
}

默认值:属性为 undefined 时使用缺省值

1
2
3
4
5
tempObject(wholeObject: { a: string, b?: number }) => {
// 即使b没有传值也为undefined
let { a, b = 1001 } = wholeObject
// 当b位undefined时使用默认值1001
}

函数声明

1
2
3
4
5
6
7
type C = { a: string, b?: number }
function f({ a, b }: C): void {
// 解构赋值:a,b为对象C里面的值,该函数本身无返回值
}

function f({ a="", b=0 } = {}): void { /*给a,b指定默认值*/ }
f();

展开操作符…

  • 数组:

1
2
3
4
let first = [1, 2]
let second = [3, 4]
let bothPlus = [0, ...first, ...second, 5]
// 对first和second的浅拷贝,不会对原数组进行改变
  • 对象:从左向右处理,所以后面的属性会覆盖前面的属性

1
2
3
4
5
6
7
8
9
10
11
let defaults = { food: "spicy", price: "$$", ambiance: "noisy" }
let search = { ...defaults, food: "rich" }

class C {
p = 12
m() {}
}
let c = new C()
let clone = { ...c }
clone.p // ok
clone.m() // error! 展开对象实例时会丢失方法
其他文章
cover
TS-symbols和迭代器和生成器
  • 24/11/01
  • 11:40
  • TypeScript
cover
TS-高级类型
  • 24/11/01
  • 11:40
  • TypeScript
目录导航 置顶
  1. 1. var
  2. 2. let 和 const
  3. 3. type 类型别名
  4. 4. 数组解构:一一对应
  5. 5. 对象解构:一一对应
  6. 6. 属性重命名
  7. 7. 默认值:属性为 undefined 时使用缺省值
  8. 8. 函数声明
  9. 9. 展开操作符…
    1. 9.1. 数组:
    2. 9.2. 对象:从左向右处理,所以后面的属性会覆盖前面的属性
请输入关键词进行搜索