Typescript 中的函数应用

参数类型和函数类型

命名函数

function add(x:number, y:number):number {
  return x + y;
}

匿名函数

var add = function(x:number, y:number):string {
  return "Hello Ts";
}

指定参数具体意义的写法

var myTs:(name:string, age:number) => number = function (n:string, a:number):number {
  return a
}

函数的可选和默认参数

正常的传递参数

function getName(firstName: string, lastName: string) {
  return firstName + " " + lastName;
}

var res1 = getName('joh', 'wong'); // 此处正确
var res2 = getName('joh'); // 此处错误
var res3 = getName('joh', 'wong', 'whatever'); // 此处错误 超出限定范围

可选参数:含有?的参数

function getName(firstName?: string, lastName?: string) {
  if(firstName && lastName) {
    return firstName + " " + lastName;
  }
  if(firstName) {
    return firstName;
  }
  if(lastName) {
    return lastName;
  }
  return 'nothing here';
}

var res0 = getName(); // 没有参数
var res1 = getName('joh', 'wong'); // 此处正确
var res2 = getName('joh'); // 此处正确 含有问号的可以不传
var res3 = getName('joh', 'wong', 'whatever'); // 此处错误 超出限定范围

默认参数:

function getName(firstName:string, lastName='Wong') {
  return firstName + ' ' + lastName;
}

var res1 = getName('Joh'); // 正确
var res2 = getName('Joh', 'Wong1'); // 正确, 此处覆盖默认值
var res3 = getName('Joh', 'Wong', 'Other'); // 错误, 无第三个参数

函数的可变参数

… 后面是数组的形式:

function pName(firstName:string, ...restOfname:string[]) {
  return firstName + ' ' + restOfname.join(' ');
}

function pName2(...restOfname:string[]) {
  return restOfname.join(' ');
}

var pn = peopleName('one', 'two', 'three', 'four', 'five'); // 正确
var pn2 = peopleName('one', 'two', 'three', 'four', 'five'); // 正确

函数中 Lambda 和 this 关键字

普通的闭包

var people = {
  name: ['J', 'L', 'M'],
  getName: function() {
    var that = this; 
    console.log(that); // 此处指向的是people对象
    return function() {
      var i = Math.floor(Math.random() * 3);
      console.log(this); // 此处指向的是 window
      return {
        n: that.name[i]
      }
    }
  }
}

var myName = people.getName();
console.log(myName().n);

Lambda的形式

var people = {
  name: ['J', 'L', 'M'],
  getName: function() {
    // Lambda形式的闭包
    return () => {
      var i = Math.floor(Math.random() * 3);
      console.log(this); // 此处指向的是 window
      return {
        n: that.name[i]
      }
    }
  }
}

var myName = people.getName();
console.log(myName().n);

函数重载

function attr(name:string):string; // 声明一个方法重载的定义,不实现方法体{}
function attr(age:number):number; // 声明一个方法重载的定义,不实现方法体{}

// 声明一个方法重载的定义,并实现方法体{}
function attr(param:any):any {
  if(param && typeof param === 'string') {
    console.log('name');
  } else if (param && typeof param === 'number') {
    console.log('age');
  } else {
    console.log('other');
  }
}

attr('Joh'); // name
attr(10) // age
attr(true) // other
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值