博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Typescript 中的函数应用
阅读量:4250 次
发布时间:2019-05-26

本文共 2612 字,大约阅读时间需要 8 分钟。

参数类型和函数类型

命名函数

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'); // nameattr(10) // ageattr(true) // other

转载地址:http://vzwei.baihongyu.com/

你可能感兴趣的文章
gdb调试常用命令
查看>>
vim正则表达式批量修改文本
查看>>
objective-c init方法的写法
查看>>
极客公园 Mac 第三方客户端(swift)
查看>>
【Lintcode】寻找峰值
查看>>
Arduino 串口读写 SD 卡模块
查看>>
图的基本算法--深度优先搜索(dfs) 和 广度优先搜索(bfs)
查看>>
[Linux] Linux内核编译安装过程,及Linux源码目录结构
查看>>
[Linux] c语言变量的存储位置-笔记
查看>>
[Linux] 头文件实质-笔记
查看>>
统一修改iOS中xib颜色值
查看>>
数据湖与数据仓库的新未来:阿里提出湖仓一体架构
查看>>
基于 Flink+Iceberg 构建企业级实时数据湖 | 附 PPT 下载
查看>>
Flink 源码:Checkpoint 元数据详解
查看>>
基于Flink+ClickHouse打造轻量级点击流实时数仓
查看>>
Flink sink schema 字段设计小技巧
查看>>
Flink 使用 union 代替 join 和 cogroup
查看>>
踩坑记 | Flink 天级别窗口中存在的时区问题
查看>>
用了 History Server,妈妈再也不用担心我的 Flink 作业半夜挂了
查看>>
强烈推荐三本 Spark 新书籍
查看>>