【03】基础知识:typescript中的函数

一、typescript 中定义函数的方法

函数声明法

javascript 复制代码
function test1(): string {
	return '返回类型为string'
}

function test2(): void {
	console.log('没有返回值的方法')
}

函数表达式/匿名函数

javascript 复制代码
const test3 = function(): number {
  return 1
}

二、typescript 中 函数参数写法

1、typescript 中定义函数传参

函数声明

javascript 复制代码
function getInfo(name: string, age: number): string {
	// 传参name为string类型、age为number类型,返回类型为string
	return `${name} - ${age}`
}

getInfo('zhangsan', 20) // zhangsan - 20

函数表达式/匿名函数

javascript 复制代码
const getInfo2 = function(name: string, age: number): string {
	// 传参name为string类型、age为number类型,返回类型为string
	return `${name} - ${age}`
}

getInfo2('zhangsan', 18) // zhangsan - 18

2、可选参数

在 es5 中,方法的形参和实参个数可以不一样;但是在 ts 中必须一样,如果不一样就需要配置可选参数。

ts 中 通过【 形参?: 数据类型 】形式定义可选参数,代表该参数在方法调用时可以不传入。

注意:可选参数必须到参数的最后面,否则ts编译时会报错

javascript 复制代码
function getInfo(name: string, age?: number): string {
	if (age) {
		return `${name} - ${age}`
	} else {
		return `${name} - 年龄未定义`
	}
}

getInfo('zhangsan') // zhangsan - 年龄未定义
getInfo('zhangsan', 20) // zhangsan - 20

3、默认参数

创建方法时,可以给参数指定默认值。

javascript 复制代码
function getInfo(name: string, age: number=18): string {
	return `${name} - ${age}`
}

getInfo('zhangsan') // zhangsan - 18
getInfo('zhangsan', 20) // zhangsan - 20

4、剩余参数

通过 es6 的 三点运算符,接受形参传过来的值

javascript 复制代码
function sum (...result: number[]): number{
	return result.reduce((prev, cur) => {
		return prev + cur
	}, 0)
}

sum(1, 2, 3, 4) // 10
javascript 复制代码
function sum (a: number, ...result: number[]): number{
  return result.reduce((prev, cur) => {
    return prev + cur
  }, a)
}

sum(1, 2, 3, 4) // 10

三、函数重载

javascript 是面向过程编程语言,没有函数重载的概念

java 中函数重载指的是,两个或者两个以上同名函数,但它们的参数不一样

typescript 中的函数重载指的是,通过为同一个函数提供多个函数类型定义来实现多种功能的目的。

typescript 为了兼容 js 重载的写法和 java 中有区别。

javascript 复制代码
function getInfo(name: string): string 
function getInfo(age: number): number
function getInfo(str: any): any {
	if (typeof str === 'string') {
		return `我叫${str}`
	} else {
		return str
	}
} 

getInfo('张三') // 我叫张三
getInfo(19) // 19
getInfo(false) // ts编译报错
javascript 复制代码
function getInfo(name: string): string 
function getInfo(name: string, age: number): string
function getInfo(name: any, age?: any): any {
	if (age) {
		return `我叫${name},年龄是${age}`
	} else {
		return `我叫${name}`
	}
}

getInfo('张三', 19) // 我叫张三,年龄是19
getInfo('张三') // 我叫张三
getInfo('zhangsan', true) // ts编译报错
getInfo(19) // ts编译报错
相关推荐
徐同保15 分钟前
上传文件,在前端用 pdf.js 提取 上传的pdf文件中的图片
前端·javascript·pdf
怕浪猫16 分钟前
React从入门到出门第四章 组件通讯与全局状态管理
前端·javascript·react.js
博主花神17 分钟前
【React】扩展知识点
javascript·react.js·ecmascript
欧阳天风24 分钟前
用setTimeout代替setInterval
开发语言·前端·javascript
EndingCoder28 分钟前
箭头函数和 this 绑定
linux·前端·javascript·typescript
xkxnq34 分钟前
第一阶段:Vue 基础入门(第 11 天)
前端·javascript·vue.js
小oo呆39 分钟前
【自然语言处理与大模型】LangGraphV1.0入门指南:核心组件Nodes
前端·javascript·easyui
行走的陀螺仪1 小时前
在UniApp H5中,实现路由栈的持久化
前端·javascript·uni-app·路由持久化·路由缓存策略
南玖i1 小时前
SuperMap iServer + vue3 实现点聚合 超简单!
javascript·vue.js·elementui
泰勒疯狂展开1 小时前
Vue3研学-标签ref属性与TS接口泛型
前端·javascript·vue.js