来学习typescript 吧! --5 函数
接口定义函数
//定义参数 num 和 num2 :后面定义返回值的类型
interface Add {
(num: number, num2: number): number
}
const fn: Add = (num: number, num2: number): number => {
return num + num2
}
fn(5, 5)
interface User{
name: string;
age: number;
}
function getUserInfo(user: User): User {
return user
}
1.注意,参数不能多传,也不能少传 必须按照约定的类型来
function sum(a: number, b: number): number {
return a + b;
}
sum(1, 2);
//sum(1, 2, 3); //Error
2函数的可选参数 ?
function sum2(a: number, b?: number): number {
if (b) {
return a + b;
} else {
return a;
}
}
sum2(1, 2);
sum2(1);
3.默认参数 =
function sum3(a: number, b: number = 10): number {
return a + b;
}
sum3(1, 2);
sum3(1);
4.剩余参数 ...
** 处理可变数量的参数**:
当你编写一个函数,并且不确定它会接收多少个参数时,剩余参数非常有用
function sum4(...args: number[]): number {
return args.reduce((prev, item) => {
return prev + item;
}, 0);
}
console.log(sum4(1, 2, 3)); // 输出: 6
console.log(sum4(10, 20, 30, 40)); // 输出: 100
数组操作示例
剩余参数可以让你方便地将函数的参数转换为数组,从而可以使用数组的方法来操作这些参数
function getStringLengths(...strings: string[]): number[] {
return strings.map(str => str.length);
}
const lengths = getStringLengths('hello', 'world', 'typescript');
console.log(lengths); // 输出: [5, 5, 10]
函数柯里化示例
可以将一个多参数函数转换成一系列使用一个参数的函数,从而实现函数柯里化
function curry(func: Function): Function {
return function curried(...args: any[]): Function {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function (...args2: any[]): Function {
return curried.apply(this, [...args, ...args2]);
};
}
};
}
// 原始函数
function sum(a: number, b: number, c: number): number {
return a + b + c;
}
// 柯里化后的函数
const curriedSum = curry(sum);
console.log(curriedSum(1)(2)(3)); // 输出: 6
console.log(curriedSum(1, 2)(3)); // 输出: 6
console.log(curriedSum(1)(2, 3)); // 输出: 6
console.log(curriedSum(1, 2, 3)); // 输出: 6
console.log(curriedSum(1, 2, 3, 4)); // 输出: 6