函数的定义
函数的定义:
function 函数名(函数列表): 返回值类型 {函数体}
//定义函数 参数类型 以冒号定义
function getName(name: string , age: number): string {
return `姓名:${name},年龄:${age}`
}
函数类型:
(参数类型) => 返回值类型
shoPerson 方法不需要知道字符串如何显示,完全由传入的函数来决定字符串的显示
//定义函数 参数类型 以冒号定义
function getName(name: string , age: number): string {
return `姓名:${name},年龄:${age}`
}
function shoPerson(name: string ,age: number ,fromat:(name: string ,age: number) => string){
const result = fromat(name, age)
console.log(result);
}
shoPerson("小明",12, getName);
类型别名:
type 别名 = (参数列表) => 返回值类型
上面的类型定义写在参数列表中显的代码很长,可以使用类型别名来进行优化
//定义函数 参数类型 以冒号定义
function getName(name: string , age: number): string {
return `姓名:${name},年龄:${age}`
}
type formatPerson = (name: string ,age: number) => string;
function shoPerson(name: string ,age: number ,fromat: formatPerson){
const result = fromat(name, age)
console.log(result);
}
shoPerson("小明",12, getName);
参数的定义
函数的参数分为四种
固定参数 、可选参数 、默认参数 、剩余参数
//固定参数
function fixation(name: string ){
}
//可选参数
function optional(name?: string){
}
//默认参数
function default(name = '小明'){
}
//剩余参数
function residue(...param:number[]){
}
在定义参数时的排序,固定参数放在前面 ,其次时可选参数,最后时剩余参数。
函数的重载
- 函数重载,指的是对声明部分重载,即声明多种调用形式
- 具有重载声明的还输,声明和实现是分离的。其中
- 声明部分的函数签名对调用负责
- 实现部分的函数签名对函数体内的代码负责
- 声明部分没有函数体,每个声明用分号表示结束;
- 实现部分紧接在说有声明之后,其函数签名部分的参数列表和返回值类型必须包容所有声明中的参数列表和返回值类型
//声明部分
function mackRequest(url: string ,config: object): void;
function mackRequest(config: object): void;
//实现部分 注意第一个参数,两个声明中第一个参数分别是string 和 object,所以下面第一个参数string | object, 使用 | 增加包容的类型
function mackRequest(param1: string | object ,param2: object){
let url: string;
let config: object | undefined;
if(typeof param1 === 'string'){
url = param1;
}else{
config = param1;
//因为config对象 未定义 url 所以这里做了类型转换
url = (param1 as any).url;
}
console.log(`request [${url}] ${config ? 'with config' : 'without config'}`);
}