来学习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
 
posted @ 2024-12-05 14:35  蜗牛般庄  阅读(19)  评论(0)    收藏  举报
Title
页脚 HTML 代码