一步一步学习TypeScript(10.Functions_函数)
来源:互联网 发布:java hashset 多线程 编辑:程序博客网 时间:2024/06/15 22:39
函数(function)分为署名函数(named function)和匿名函数(anonymous function)看代码
// named function function sub(x,y){ console.log(x-y);} // anonymous functionvar sub1 = function(x,y){ console.log(x-y);}
完善上面的代码,增加类型相关信息
function sub(x: number, y: number): number{ return x-y;}var sub1 = function(x: number, y: number): number{ return x-y}
让我们写出函数的完整类型,看上去是这样的,使用=>
符号连接参数类型与反回值类型,如果没有任何反回值时要记得添写void
.
var sub2: (x: number, y:number)=>number = function(x: number, y:number): number{ return x-y;}// 只要类型相匹配就可以,名称无关紧要,增加函数类型在我看来只是为了增加函数的可读性var sub2: (source: number, dest:number)=>number = function(x: number, y:number): number{ return x-y;}
在看下面的例子,TypeScript都能正确的判断出函数所对应的类型.
//右边指定类型,左边没有指定var sub3 = function(x: number, y: number): number{ return x-y;}//左边指定类型,右边没有指定var sub4: (x: number, y:number)=>number = function(x, y): number{ return x-y;}
大家都知道.在JavaScript里函数的参数是可有可无的,而在TypeScript中每个参数都是必需的,即声明时需要传入两个参数,在使用时传入的参数个数必需是两个而且类型必需一致,否则在编译时就会抛出错误.
function twoParam(one: string, two: string):string{ return one + two;}twoParam('a','b');twoParam('a'); //错误,参数数量不匹配twoParam('a','b','c'); //错误,参数数量不匹配
如果就想在TypeScript中使用可选的参数,需要在不确定的参数后面加上?
符号,需要说明的是可选参数必需放到最后,例如:
function buildName(firstName: string, lastName?: string) { if (lastName) return firstName + " " + lastName; else return firstName;}var result1 = buildName("Bob"); //正确var result2 = buildName("Bob", "Adams", "Sr."); //错误, 参数数量不匹配var result3 = buildName("Bob", "Adams"); //正确
为可选参数指定一个默认值
function buildName(firstName: string, lastName = 'pope') { // ...}
如果我们不确定可选参数的个数
function buildName(firstName: string, ...restOfName: string[]) { return firstName + " " + restOfName.join(" ");}var employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");
Lambda 和 this
在javascript中使用this是非常容易因为上下文不同,使用this时得出错误的结果.例如:
var myObj = { name: 'weiqi', say: function(str:string){ return function(){ console.log(this.name + ' ' + str); } }}var say = myObj.say('hello');say(); // 输出为 undefined hello
可以看到this.name反回结果为undefined, 说明this没有绑定到myObj这个上下文中.如果改用Lambda写法的话,TypeScript会在编译时自动为我们绑定this到当前上下文中. 可以改造上个例子为:
var myObj = { name: 'weiqi', say: function(str:string){ return () => console.log(this.name + ' ' + str); }}var say = myObj.say('hello');say(); // 输出 weiqi hello
函数的重载
重载的好处为,在编写代码时由编译器负责检查传入参数类型及反回类型,使用时可以反回与传入参数类型相匹配的反回类型.看例子:
function add(arg1: string, arg2: string): string; //重载1function add(arg1: number, arg2: number): number; //重载2function add(arg1: boolean, arg2: boolean): boolean;//重载3//这是对上面重载的实现function add(arg1: any, arg2: any): any { return arg1 + arg2;}//只能传入之前定义后的3种参数类型,如果传入其它组合类型则会得到一个错误console.log(add(1, 2)); //反回类型为numberconsole.log(add("Hello", "World")); //反回类型为stringconsole.log(add(true, false)); //反回类型为boolean
0 0
- 一步一步学习TypeScript(10.Functions_函数)
- 一步一步学习TypeScript(11.Arrow Functions_箭头函数➹)
- 一步一步学习TypeScript(01.Hello_World)
- 一步一步学习TypeScript(06.数组)
- 一步一步学习TypeScript(00.环境安装)
- 一步一步学习TypeScript(02.基本类型)
- 一步一步学习TypeScript(03.let与const)
- 一步一步学习TypeScript(05.Duck Typing)
- 一步一步学习TypeScript(07.Any类型)
- 一步一步学习TypeScript(09.enums_枚举)
- 一步一步学习TypeScript(13.Tuples_元组)
- 一步一步学习TypeScript(16.Private&Protected&static)
- 一步一步学习TypeScript(17.Getters&Setters)
- 一步一步学习TypeScript(18.Interfaces_接口)
- 一步一步学习TypeScript(19.Modules_模块)
- TypeScript学习笔记之函数
- 一步一步学习ASP.NET 5 (五)- TypeScript
- 一步一步学习TypeScript(04.严格的对象赋值检查)
- 从文件 I/O 看 Linux 的虚拟文件系统
- Hive UDF开发指南
- iOS应用架构谈 (3)网络层设计方案
- oracle命令行删除某用户的所有表
- Android Watchdog框架看门狗解析、死锁应用与改造(上)
- 一步一步学习TypeScript(10.Functions_函数)
- PHP漏洞全解(六)-Session劫持
- scaleType记录
- iPhone手机下载应用软件的区别(itunes,i4和itools)
- git 命令
- QScrollBar 的css 设置详解
- phpstorm移除已创建的项目
- Axure RP7.0制作Tab选项卡
- LeetCode:Excel Sheet Column Number