TypeScript的声明,解构和函数

声明

let声明只在块级作用域内有效
块级作用域中变量不能在它声明之前被读取或赋值 在相同作用域中,let不允许变量被重新声明,而在使用var声明时,不管声明多少次最后只会得到最近一次声明的那个值

function funA(x) {  
    let x = 100;//报错,x已经在函数入参声明
}

const声明与let声明相似,它与let拥有相同的作用域规则,但const声明为常量不能被重新赋值,如果定义的常量是对象,对象里的属性值是可以被重新赋值的。

解构

解构就是讲声明的一组变量与相同结构的数组或者对象的元素数组一一对应,并将变量相应元素进行赋值

let input = [1,2];  
let [first, second] = input;  
console.log(first);//相当于input[0]: 1  
console.log(second);//2  

也可作用于已声明的变量

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

作用于函数参数

function f([first, second] = [number,number]){  
        console.log(first + second);
}
f([1, 2]);//3  

还可以使用rest参数语法

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

对象解构

let test = {x:0, y:10, width:15, height:20 };  
let {x,y,width,height} = test;  
console.log(x,y,width,height);//0,10,15,20  

函数

函数定义

参数类型和返回值类型都会被检查。在调用时,只做参数类型和个数的匹配,不错参数名的校检

//函数声明
function maxA(x: number, y:number):number {  
    return x > y ? x : y;
}
//函数表达式

let maxB = function(x:number, y:number):number {return x > y ? x : y;}  

被调函数的每个参数都是必传的,在编译时会检查函数每个参数是否传值。传递给每一个函数的参数个数必须和函数定义时的参数个数一致.可选参数必须在必选参数的后面

也可以使用可选参数语法

function max(x:number, y?:number): number {  
    ......
}

默认参数

如果函数的某个参数设置了默认值,当该函数被调用时,如果没有给这个参数传值或者传的是undefined时,这个参数就是被设置的默认值

function max(x:number, y=4):number {  
    ....
}

剩余参数

所有的可选参数可以放在一个变量里

function sum(x:number, ...restOfNumber:number[]): number {  
let result = x;  
for (let i = 0;i < restOfNumber.length; i++){  
    result += restOfNumber[i];
}
return result;  
}

函数重载

函数重载通过为同一个函数提供多个函数类型来达到实现多种功能的目的。 编译器会根据参数类型来判断该调用哪个函数。通过查找重载列表来实现匹配,根据定义的优先顺序来依次匹配。建议把最精确的定义放在最前面

function css(config: {});  
function css(config: string, value: string);  
function css(config: any, value?:any){  
    if (type config === 'string'){

    }else if (type config === 'object') {

    }
}