手摸手一起学习Typescript第三天 - 函数Function

简介: 手摸手一起学习Typescript第三天 - 函数Function

函数 Function



Typescript 文档地址:Functions

在JavaScript中,函数是构成任何应用程序的基础块。通过函数,你得以实现建立抽象层、模仿类、信息隐藏和模块化。在TypeScript中,虽然已经存在类和模块化,但是函数依旧在如何去"处理"事件的问题上起关键作用。TypeScript在JavaScript的标准基础上给函数添加了一些新的功能使使用者可以更好的用函数处理工作。


首先,和JavaScript一样,TypeScript中的函数可以创建命名函数和匿名函数。这样你就可以为应用程序选择最合适的方式,无论是定义一系列函数API还是一次性使用的函数。

小demo


// 来到我们的第一个例子,约定输入,约定输出
function add(x: number, y: number): number {
  return x + y
}
// 可选参数
function add(x: number, y: number, z?: number): number {
  if (typeof z === 'number') {
    return x + y + z
  } else {
    return x + y
  }
}
// 函数本身的类型
const add2: (x: number, y: number, z?:number) => number = add
// interface 描述函数类型
const sum = (x: number, y: number) => {
  return x + y
}
interface ISum {
  (x: number, y: number): number
}
const sum2: ISum = sum
复制代码


函数类型


JavaScript的函数参数是可以任何类型的,typeScript中加了对参数提添加类型,函数本身添加返回值类型。


function greetNane(name: string): string {
  return `hello ${name}`
}
复制代码


还有一种函数声明的方式:


let greetNane: (name: string) => string = function (name: string): string {
    return `hello ${name}`
}
复制代码


typeScript中函数调用时传的参数类型和数量和函数声明时候不匹配会报错。


可选参数和默认参数


可选参数:typeScript中设置函数中一个参数可传也可不传的。


let greetNane: (name: string, age?: number) => string = function (name: string, age?: number): string {
    return `hello ${name}`
}
复制代码


默认参数:和es6的默认参数写一样,也可以在参数后面加类型。


let greetNane: (name: string, age: number = 0) => string = function (name: string, age: number = 0): string {
    return `hello ${name} ${age}`
}
let greetNane: (name: string, age = 0) => string = function (name: string, age = 0): string {
    return `hello ${name} ${age}`
}
复制代码


剩余参数


typeScript剩余参数和es6的写法差不多,也是后面加个参数的类型。


let greetNane: (name: string, ...arrs: string[]) => string = function (name: string, ...arrs: string[]): string {
    return `hello ${name} ${age}`
}
复制代码


...的用法和es6的一样。


注:因为现在主流浏览器都没有完全支持es6,所有在实际项目中es6和typescript都是最后转换成es5的写法。剩余参数的转换成es5是遍历arguments参数将参数放到arrs数组中。


let arrs=[]
for (var _i = 0, coumt = arguments.length; i < coumt; i++) {
   arrs[_i]=arguments[_i]
}
复制代码


如果你认为这个可能对应用程序带来性能问题,应考虑不使用剩余参数只使用数组作为参数。


重载


函数重载或方法重载是名称相同并且参数数量类型不同创建多个方法的能力。

typeScript中通过声明函数标签,最后在一个标签实现函数的。


function greetNane(name:string) :string;
function greetNane(name:number) :number;
function greetNane(name:boolean) :boolean;
function greetNane(name:(string|number|boolean)):any{
    return name;
}
复制代码


泛型


作用域,this,箭头函数就不说了,直接说泛型,泛型来创建可重用的组件,一个组件可以支持多种类型的数据。


function greetNane<T>(name:T):T{
    return name
}
greetNane<string>('name')
greetNane('name')
复制代码


函数根据参数的类型来返回对应类型的值。

相关文章
|
2月前
|
JavaScript
typeScript基础(3)_ts函数默认值和可选参数
本文介绍了在TypeScript中如何使用函数的默认值和可选参数。展示了如何为函数参数指定默认值,使得在调用函数时可以省略某些参数,以及如何定义可选参数。
162 2
|
1月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新特性,与传统函数相比,它有更简洁的语法,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。箭头函数不适用于构造函数,不能使用new关键字调用。
|
1月前
|
移动开发 JavaScript 前端开发
TypeScript:数组类型&函数使用&内置对象
本文介绍了 TypeScript 中的数组类型、对象数组、二维数组、函数、函数重载、内置对象等概念,并通过代码示例详细展示了它们的使用方法。还提供了一个使用 HTML5 Canvas 实现的下雨效果的小案例。
|
1月前
|
数据可视化 开发者 索引
详解Wireshark LUA插件函数:function p_myproto.dissector(buffer, pinfo, tree)
在 Wireshark 中,LUA 插件通过 `function p_myproto.dissector(buffer, pinfo, tree)` 扩展协议解析能力,解析自定义应用层协议。参数 `buffer` 是 `PacketBuffer` 类型,表示原始数据包内容;`pinfo` 是 `ProtoInfo` 类型,包含数据包元信息(如 IP 地址、协议类型等);`tree` 是
63 1
|
1月前
|
JavaScript
箭头函数与普通函数(function)的区别
箭头函数是ES6引入的新语法,相比传统函数表达式更简洁,且没有自己的this、arguments、super或new.target绑定,而是继承自外层作用域。这使得箭头函数在处理回调和闭包时更加灵活方便。
|
2月前
|
JavaScript
typeScript基础(1)_原始数据类型学习
本文介绍了TypeScript中的原始数据类型,包括布尔型、数值型、字符串型、`void`、`null`和`undefined`,并展示了如何在TypeScript中声明和使用这些类型。同时,还介绍了如何通过`tsc`命令编译TypeScript文件。
51 4
|
1月前
|
JavaScript 索引
TypeScript(TS)安装指南与基础教程学习全攻略(二)
TypeScript(TS)安装指南与基础教程学习全攻略(二)
53 0
|
1月前
|
JavaScript 前端开发 安全
TypeScript(TS)安装指南与基础教程学习全攻略(一)
TypeScript(TS)安装指南与基础教程学习全攻略(一)
29 0
|
1月前
|
C++ 容器
函数对象包装器function和bind机制
函数对象包装器function和bind机制
20 0
|
2月前
|
JavaScript
typeScript基础(7)_函数的类型
本文介绍了TypeScript中函数的类型,包括函数声明与函数表达式的类型注解,如何定义函数的参数类型、返回类型,以及可选参数和参数默认值。还探讨了函数的剩余参数、如何使用接口定义函数的形状,以及函数重载的概念和实践。
30 0