美文网首页我爱编程
TypeScript--4.函数

TypeScript--4.函数

作者: 殷灬商 | 来源:发表于2016-12-28 11:27 被阅读46次

函数在各个语言里用的太多了,就不赘述,只讨论一下TypeScript的函数跟JS的函数不同的地方.

1.函数类型

TypeScript里的函数需要给参数和返回值都指定类型,它能够根据返回语句,自动判断返回值类型,通常都可以省略

function add(x: number, y: number):number{    
    return x + y;
}
console.log(add(1, 2));

接下来看一下函数的完整类型,参数类型和返回值类型用=>隔开

let myAdd: (x:number, y:number)=>number = 
function(x: number, y: number): number { return x+y; };

2.可选参数和默认参数

当参数可传可不传的时候,就可以在对应的参数名旁边加上?修饰,实现可选参数功能,如果没传值,对应形参值是undefined.要把可选的参数放到参数最后面

function buildName(firstName: string, lastName?: string){
    console.log(firstName + " " + lastName);
}
buildName("龙哥");
buildName("东旭", "龙哥");

默认参数在ES6之后,JS的函数也能设置.

function buildName(firstName: string, lastName = "赵") { 
    return firstName + " " + lastName;
}

3.剩余参数 Rest参数

这个也是ES6里新出现的特性,在JS里有一个非常重要的对象arguments,即使不写形参,也可以通过arguments获取到形参内容.剩余参数会被当做个数不限的可选参数,可以一个都没有,同样也可以有任意个.编译器创建参数数组,名字是你在省略号( ... )后面给定的名字,你可以在函数体内使用这个数组.

function buildName(firstName: string, ...restOfName: string[]) {
    console.log(restOfName);
}
buildName("赵", "钱", "孙", "李");

4.this和箭头函数

在JS里,this的使用对于很多初学者来说,会出很多问题,很多问题都出现在this的指向,如果真出问题,大家可以先打印一下this的指向,看一个例子

let deck = {    
    name: ["宋江", "卢俊义", "吴用", "公孙胜"],    
    test: function() {        
        return function() {            
            let num1 = Math.floor(Math.random() * 52);            
            let num2 = Math.floor(num1 / 13);            
            console.log(this.name);            
            return {suit: this.name[num2], card: num1 % 13};        }    
    }
}
let cardPicker = deck.test();
let pickedCard = cardPicker();
console.log(pickedCard);

这里打印出来suit的内容是undefined,原因就是出现在this的问题,这里的this实际上指代的是window,因为deck是window的变量,window上没有name的变量,所以当取值的时候,就是undefined,还是this指向的问题.ES6里,可以使用箭头函数来解决这种指代.箭头函数能报错函数创建时候的this,而不是调用时候的this

let deck = {    
    name: ["宋江", "卢俊义", "吴用", "公孙胜"],    
    test: function() {        
        return ()=> {            
            let num1 = Math.floor(Math.random() * 52);            
            let num2 = Math.floor(num1 / 13);            
            console.log(this.name);            
            return {suit: this.name[num2], card: num1 % 13};        }    
    }
}

TypeScript里的对象,属性都有对应类型,可以在接口里设置this的类型,上述例子里的this对应的都是any类型,通过类型也能避免指向问题

interface Deck {    
    suits: string[];   
    test(this: Deck)=>Deck;
}
let deck: Deck = {    
    suits:["宋江", "卢俊义", "吴用", "公孙胜"],    
    test: function(this: Deck) {        
    return () => {            
        let num1 = Math.floor(Math.random() * 52);           
        let num2 = Math.floor(num1 / 13);            
        return {suit: this.name[num2], card: num1 % 13};        
      }    
    }
}

相关文章

  • TypeScript--4.函数

    函数在各个语言里用的太多了,就不赘述,只讨论一下TypeScript的函数跟JS的函数不同的地方. 1.函数类型 ...

  • Excel(三)

    AND函数 OR函数 NOT函数 IF函数 频率分析函数FREQUENCY

  • if、else if、for、while、repeat函数

    ①if函数 ②else if函数 ③for函数 ④while函数 ⑤repeat函数

  • strsplit、mapply、paste、match函数

    strsplit函数 mapply函数 strsplit函数 mapply函数 paste函数 match函数 第...

  • Oracle中常用函数(SQL)

    Oracle函授有以下几个分类:数字函数、字符函数、日期函数、转换函数、集合函数、分析函数 数字函数: 字符函数:...

  • MySQL函数

    字符函数 数字运算函数 比较运算符和函数 日期时间函数 信息函数 聚合函数 加密函数 流程函数

  • BI-SQL丨AND & OR & IN

    AND函数 & OR函数 & IN函数 AND函数、OR函数和IN函数都可以理解是WHERE函数的补充,当然也可以...

  • Python之函数

    课程大纲 函数定义 函数的参数 函数的返回值 高阶函数 函数作用域 递归函数 匿名函数 内置函数 函数式编程 将函...

  • 函数基本知识

    函数 函数的定义: def 函数名() 函数的调用:函数名() #不能将函数调用放在函数定义上方 函数的文档注...

  • 积分表——不定期更新

    基本初等函数包括: 常函数: 幂函数 指数函数 对数函数 三角函数 反三角函数 I、反函数Ⅱ、复合函数:初等函数(...

网友评论

    本文标题:TypeScript--4.函数

    本文链接:https://www.haomeiwen.com/subject/bovsvttx.html