【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编译报错
相关推荐
不会敲代码13 小时前
手写 Mini React:从 JSX 到虚拟 DOM 再到 render,搞懂 React 底层原理
前端·javascript·react.js
kyriewen4 小时前
你的代码仓库变成“毛线团”了?Monorepo 用 Turborepo 拆成“乐高积木”
前端·javascript·面试
旷世奇才李先生4 小时前
Vue3\+TypeScript 2026实战——企业级前端项目架构搭建与性能优化全指南
前端·架构·typescript
openKaka_5 小时前
createRoot 到底创建了什么:FiberRootNode 和 HostRootFiber 的初始化过程
前端·javascript·react.js
阿豪只会阿巴7 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——项目介绍
javascript·python·django·html
刀法如飞8 小时前
TypeScript 数组去重的 20 种实现方式,哪一种你还不知道?
前端·javascript·算法
_风满楼9 小时前
TDD实战-会议室冲突检测的红绿重构循环
前端·javascript·算法
Rkgua9 小时前
JS中的惰性函数基本介绍
前端·javascript
客场消音器9 小时前
我用两周半 Vibe Coding 做了一个前额叶训练的微信小程序
前端·javascript·后端
不考研当牛马12 小时前
HTML CSS 新手大全初学者必看 (含有部分 JavaScript)
javascript·css·html