004--TypeScript变量声明之解构展开

1.解构

解构分为数组解构和对象解构

let input = [1,2]
let [first,second] = input
//上述写法相当于
// let first = input[0]
// let second = input[1]
let input: [number,number] = [1,2]
function f([first,second]: [number,number]){
  console.log(first)
  console.log(second)
}
f(input)  //1   2
//编译后
var input = [1, 2];
function f(_a) {
    var first = _a[0], second = _a[1];
    console.log(first);
    console.log(second);
}
f(input);

剩余变量

let [first,...rest] = [1,2,3,4]
console.log(first)//1
console.log(rest)//[ 2, 3, 4 ]
//编译后
// var _a = [1, 2, 3, 4], first = _a[0], rest = _a.slice(1);
// console.log(first);
// console.log(rest);
let [first] = [1,2,3,4]
let [, second,,fourth] = [1,2,3,4]
console.log(first)//1
console.log(second)//2
console.log(fourth)//4

对象解构

let o = {
  a: ‘foo‘,
  b: 12,
  c: ‘bar‘
}

let {a, b} = o
console.log(a)//foo
console.log(b)//12

let {a:f, ...passthrough} = o
console.log(passthrough)//{ b: 12, c: ‘bar‘}
let total = passthrough.b + passthrough.c.length
console.log(total)//15

编译后的如下所示

var __rest = (this && this.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
        t[p] = s[p];
    if (s != null && typeof Object.getOwnPropertySymbols === "function")
        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)
            t[p[i]] = s[p[i]];
    return t;
};
var o = {
    a: ‘foo‘,
    b: 12,
    c: ‘bar‘
};
var a = o.a, b = o.b;
console.log(a); //foo
console.log(b); //12
var f = o.a, passthrough = __rest(o, ["a"]);
console.log(passthrough);
var total = passthrough.b + passthrough.c.length;
console.log(total);
let o = {
  a: ‘foo‘,
  b: 12,
  c: ‘bar‘
}

let {a: newName1, b: newName2} = o//重命名
//相当于
// let newName1 = o.a
// let newName2 = o.b
//其实这样很容易引起困惑,导致我们给参数指定类型只能这样指定
// let {a, b}: {a: string, b: number} = 0
//默认值的情况
function keepWholeObject(wholeObject: { a: string, b?: number }) {
  //上述b参数是个可选参数,传进来可能是个undefined
  //我们可以给b一个默认值
  let {a, b = 100} = wholeObject
}
function f({ a, b = 0 } = { a: ‘ ‘ }): void {
  //给a定义了一个默认值,如果是对象必须传入a值
}
f({ a: ‘yes‘ });//这样是没问题的
f()//这样写也是没问题的
f({})//报错 类型推断里面b是个可选参数,a不是

展开

数组展开

let first = [1, 2];
let second = [3, 4];
let bothPlus = [0, ...first, ...second, 5];
console.log(bothPlus)//[ 0, 1, 2, 3, 4, 5 ]
//实际上这个过程是个浅拷贝的过程,不会影响原始数组
//编译后的文件
var first = [1, 2];
var second = [3, 4];
var bothPlus = [0].concat(first, second, [5]);
console.log(bothPlus);

对象展开

let defaults = {
  food: ‘spicy‘,
  price: ‘$10‘,
  ambiance: ‘noisy‘
}

let search = { ...defaults, food: ‘rich‘ }
console.log(search)//{ food: ‘rich‘, price: ‘$10‘, ambiance: ‘noisy‘ }
//后面的覆盖前面的 food
//编译成es2015
// let defaults = {
//   food: ‘spicy‘,
//   price: ‘$10‘,
//   ambiance: ‘noisy‘
// };
// let search = Object.assign({}, defaults, { food: ‘rich‘ });
// console.log(search); //{ food: ‘rich‘, price: ‘$10‘, ambiance: ‘noisy‘ }

2019-05-24  10:18:42

原文地址:https://www.cnblogs.com/ccbest/p/10916480.html

时间: 2024-10-29 22:38:44

004--TypeScript变量声明之解构展开的相关文章

001-es6变量声明、解构赋值、解构赋值主要用途

一.基本语法 1.1.声明变量的六种方法 参看地址:http://es6.ruanyifeng.com/#docs/let let:局部变量,块级作用域,声明前使用报错 var:全局变量,声明前使用 undefined const:声明一个只读的常量.一旦声明,常量的值就不能改变.只是内存地址不变,如果是对象,内存不变属性对应的值可变 function: import: class: 1.2.变量解构赋值 参看地址:http://es6.ruanyifeng.com/#docs/destruct

ES6--变量的声明及解构赋值

ES6的目标是使得JavaScript语言可以用来编写大型的复杂的应用程序,成为企业级开发语言:该标准已于2015年6月17日正式发布.但是真正的普及我认为还得需要一段时间,然而这并不是理由让我们不去了解ES6.更重要的一点是,Google公司的V8引擎已经部署了ES6部分特性,对于NodeJS的开发者来说应该熟练掌握. 在浏览器没有全面支持的情况下,Google公司推出了Traceur转码器(https://github.com/google/traceur-compiler),可将ES6编译

TypeScript 变量声明

ES6 中,变量声明一共有6种,分别是var.function .let.const.class和import. let 基本语法:let 变量名 :类型.其中类型不是必须的. 1.用于声明变量,其用法似于var. let name = 'Sunny' 2.所有声明的 let 变量仅在let命令所在的代码块(块级作用域)内有效. function f(input: boolean) { let a = 100; if(input) { let b = a + 1; // 运行正确 return

变量作用域与解构赋值

在JavaScript中,用var申明的变量实际上是有作用域的. 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量: 'use strict'; function foo() { var x = 1; x = x + 1; } x = x + 2; // ReferenceError! 无法在函数体外引用变量x 如果两个不同的函数各自申明了同一个变量,那么该变量只在各自的函数体内起作用.换句话说,不同函数内部的同名变量互相独立,互不影响: 'use stric

ES6解构赋值

前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程.本文将详细介绍ES6解构赋值 引入 在ES5中,开发者们为了从对象和数组中获取特定数据并赋值给变量,编写了许多看起来同质化的代码 let options = { repeat: true, save: false }; // 从对象中提取数据 let repeat = options.repeat, save = option

ES6笔记(3)-- 解构赋值

系列文章 -- ES6笔记系列 解构赋值,即对某种结构进行解析,然后将解析出来的值赋值给相关的变量,常见的有数组.对象.字符串的解构赋值等 一.数组的解构赋值 function ids() { return [1, 2, 3]; } var [id1, id2, id3] = ids(); console.log(id1, id2, id3); // 1 2 3 如上,解析返回的数组,取出值并赋给相应的变量,这就是解构赋值 1. 还可以嵌套多层,只要相应的模式匹配了就能解析出来 var [a,

ES6 - Note2:解构赋值

ES6的解构赋值就是利用模式匹配从按照一定模式的数组或者对象中提取值赋值给变量. 1.数组的解构赋值 在ES6以前,变量的赋值是直接指定的,以后可以这么来写,如下所示 let [a,b,c] = [1,2,3]; console.log(a,b,c) 1 2 3 解构赋值只要等号两边的模式一致,便可解析成功,如下所示 var [d,[f,g]] = [3,[4,5]]; console.log(d,f,g); 3 4 5 ----------------------------- var [,,

ES6-个人学习笔记二--解构赋值

第二期,解构赋值如果能够熟练应用确实是个十分方便的功能,但是过分的依赖和嵌套只会让代码理解和维护起来十分困难,是个体现高逼格的表达式呢~ 1,解构赋值的基础 //定义:es6运行按照一定模式,从数组或对象中提取值,并对变量进行赋值,如 var [a,b,c] = [1,2,3]; //一些其他方式 let [ , , a1] = [1,2,3]; //a1:3 let [a2,...b2] = [1,2,3,4]; //a2:1,b2:[2,3,4] let [a3,b3,...c3] = [1

Python封装及解构

python封装及解构 Python的封装与其他语言的封装箱不同,python中没有装箱的概念,一切皆对象 将多个值使用逗号进行分割,本质上是返回元组 In [1]: a = 1,2 In [2]: type(a) Out[2]: tuple In [3]: a Out[3]: (1, 2) 封装 在进行交换的时候,已经被封装为元组 在赋值的过程中,看似什么都没有做,但是在右值将其封装为元组,因为其值不变 In [9]: a = 1,2 In [10]: a?? Type:       tupl