LayaBox---TypeScript---变量声明

Posted 格拉格拉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LayaBox---TypeScript---变量声明相关的知识,希望对你有一定的参考价值。

一:变量声明

let 和 const javascript里相对较新的变量声明方式。let在很多方面与var相似,但是可以帮助大家避免在javaScript里常见的一些问题。

相对于 javaScript 的 var  , TypeScript 的 let 在作用域方面做了一些提升,帮助我们避免一些不必要的问题。

const 是对let的一个增强。它能阻止对一个变量的再次赋值。--相当于其他语言定义的常量。

const 声明 是声明变量的另一种方式。
如:
const numLivesForCat = 9;

它与let声明相似,但是,它们被赋值后不能被改变,也就是不允许重新赋值。

const kitty = 
    name: "Aurora",
    numLives: numLivesForCat



//Error
const kitty = 
    name: "Boomb",
    numLives: numLivesForCat
;


//除非你使用特殊的方法去避免,实际上const变量的内部状态是可修改的。
//幸运的是,TypeScript允许你将对象的成员设置成只读的。
//all "okay"
kitty.name = "aaa";
kitty.name = "bbb";
kitty.name = "ccc";
kitty.numLives--;

二:解构

1.解构数组

//最简单的解构莫过于数组的解构赋值了:
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];

2.解构方法---作用于已声明的变量会更好:

//变量交换
[first,second] = [second,first];

作用于函数参数:
function f([first,second]: [number,number])

    console.log(first);
    console.log(second);


f(input);

你可以做数组里使用...语法创建剩余变量:

let [first, ...rest] = [1,2,3,4];

console.log(first);   //outputs 1
console.log(rest);   //outputs [2,3,4]

相当于javaScript,你可以忽略你不关心的尾随元素
let[first] = [1,2,3,4];
console.log(first);    //outputs 1
或其它元素:
let [,second,,forth] = [1,2,3,4];

3.对象解构

let o = 
    a:"foo",
    b:12,
    c:"bar"
;

let a,b  = o;

//这通过o.a 和 o.b 创建了a 和 b. 如果你不需要c  就可以忽略它。
就像数组解构,你可以用没有声明的赋值:
(a,b =  a:"baz",b:101 );

⚠️注意:

我们需要用括号将它括起来,因为javaScript通常以 起始的语句作为一个块。

//你可以做对象里使用...语法创建剩余变量:
let  a, ...passThrough  = o;
let total = passThrough.b + passThrough.c.length;

4.属性重命名

你也可以给属性 以不同的名字:
let a:newName1, b:newName2  = o;

相当于:
let newName1 = o.a;
let newName2 = o.b;

但是,这里的冒号不是指示类型的。如果你想指定它的类型,仍然需要在其后写上完整的模式。
let a,b:a:string, b:number = o;

5.默认值

默认值可以让你在属性为undefined时使用缺省值:

function keepWholeObject( wholeObject: a:string,b?:number )
    leta,b=1001 = wholeObject;


这样,即使b没有被传值, keepWholeObject函数的变量wholeObject的属性 a 和 b 都会有值。

6.函数声明

解构也能用于函数声明,如:
type C = a:string, b?:number

function f(a,b:C): void

    //....


但是,通常情况下更多的是指定默认值。首先需要在默认值之前设置其格式。
function f(a="",b=0=): void

    //...


f();

其次,需要知道在解构属性上给予一个默认或可选的属性来替换主初始化列表。

7.展开

展开操作与解构相反。 

1.将一个数组展开为另一个数组,如:
let first = [1,2];
let second = [3,4];
let bothPlus = [0, ...first, ...second, 5];

这会令bothPlus 的值为[ 0,1,2,3,4,5]

2.将一个对象展开为另一个对象,如:
let defaults = food:"spicy", price:"$$", ambiance:"noisy";
let search =  ...defaults, food:"rich";

此时,search的值为food:"rich", price:"$$", ambiance:"noisy",
出现在展开对象后面的属性会覆盖前面的属性。
let search =  food:"rich", ...defaults; 亦然。

以上是关于LayaBox---TypeScript---变量声明的主要内容,如果未能解决你的问题,请参考以下文章

LayaBox---TypeScript---类型推论

LayaBox---TypeScript---泛型

LayaBox---TypeScript---首次接触遇到的问题

LayaBox---TypeScript---模块

LayaBox---TypeScript---基础数据类型

LayaBox---TypeScript---三斜线指令