【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编译报错
相关推荐
To_OC8 小时前
从一次栈溢出报错说起,我把递归彻底扒明白了
javascript·算法·程序员
kyriewen10 小时前
面试官问你:“AI 能写 80% 的代码了,公司为什么还需要你?”
前端·javascript·面试
Goodbye13 小时前
从 Token 到 Embedding:LLM 核心基础深度解析
javascript·人工智能
用户9385156350713 小时前
工具调用背后:LLM 如何突破“缸中大脑”,操控真实世界?
javascript·人工智能
Goodbye13 小时前
从函数到智能:LLM Tool Use 深度解析
javascript·人工智能
半个落月13 小时前
大模型到底是怎么“调用工具”的?从一个 Node.js Demo 看懂 Tool Use
javascript·人工智能
烬羽13 小时前
中英文 token 数量差一倍?两段 JS 代码搞懂 LLM 底层是怎么"读"文字的
javascript·程序员·架构
山河木马13 小时前
矩阵专题1-怎么创建模型矩阵(uModelMatrix)
javascript·webgl·计算机图形学
前端开发爱好者18 小时前
支持 110 种文件预览!兼容 Vue、React、Svelte!
前端·javascript·vue.js
大家的林语冰19 小时前
👍 尤大重学 Webpack,Vite 8.1 再进化,打包模式复活!
前端·javascript·vite