【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编译报错
相关推荐
Zk.Sun2 分钟前
【RK3588 Mali610 适配 Qt6 】
前端·javascript·vue.js
不想吃菠萝6 分钟前
vue3+ts 使用postcss-pxtorem依赖进行rem适配
前端·javascript·vue.js·postcss
kyriewen1129 分钟前
本地存储全家桶:从localStorage到IndexedDB,把数据塞进用户浏览器
开发语言·前端·javascript·ecmascript·html5
Rysxt_1 小时前
Vue 组件穿透(透传)完全指南:从背景到实战
前端·javascript·vue.js
束尘1 小时前
Vue3 + Element Plus 实现 ZIP 压缩包在线预览(支持图片插入 / 文件预览)
前端·javascript·vue.js
一只小阿乐1 小时前
js流式模式输出 函数模式使用
开发语言·javascript·ai·vue·agent·流式数据·node 服务
伯远医学1 小时前
如何判断提取的RNA是否可用?
java·开发语言·前端·javascript·人工智能·eclipse·创业创新
人人常欢笑2 小时前
Grafana 表格自定义下载样式。
javascript·react.js·grafana
lifewange2 小时前
JavaScript是什么
开发语言·javascript·ecmascript
Armouy2 小时前
Nuxt.js 学习复盘:核心概念与实战要点
前端·javascript·学习