Skip to content

函数

定义函数类型,有三种方式

(一) 传统型

js
function addone(arg1: number, arg2: number): number {
  return arg1 + arg2;
}

console.log(addone(2, 3));

//  或者

const addone = (arg1: number, arg2: number): number => {
  return arg1 + arg2;
};

(二) 接口类型

js
interface addone {
  (arg1: number, arg2: number): number;
}

const add: addone = (arg1: number, arg2: number): number => {
  return arg1 + arg2;
};

(三)使用别名 (最省事)

js
type addone = (arg1: number, arg2: number) => number;

let add: addone = (arg1, arg2) => {
  return arg1 + arg2;
};

console.log(add(1, 2));

函数参数

可选参数必须放到最后,通过?来判定

js
type Add = (x?: number, y: number) => number; // error 必选参数不能位于可选参数后。

type Add2 = (x: number, y?: number) => number; //正确

默认参数

js
const add = (x: number, y: number = 2) => {
  return x + y;
};

剩余参数

js
const handleData = (arg1, ...args) => {
  // 这里省略逻辑
  console.log(args);
};
handleData(1, 2, 3, 4, 5); // [ 2, 3, 4, 5 ]

再比如

js
const handleData = (arg1: number, ...args: number[]) => {
  //
};
handleData(1, "a"); // error 类型"string"的参数不能赋给类型"number"的参数

函数重载

  • 最后必须写一个 any 函数,否则出不来
js


function handleData(x: string): string[]; // 这个是重载的一部分,指定当参数类型为string时,返回值为string类型的元素构成的数组
function handleData(x: number): string; // 这个也是重载的一部分,指定当参数类型为number时,返回值类型为string
function handleData(x: any): any { // 这个就是重载的内容了,他是实体函数,不算做重载的部分
  if (typeof x === "string") {
    return x.split("");
  } else {
    return x
      .toString()
      .split("")
      .join("_");
  }
}
handleData("abc").join("_");
handleData(123).join("_"); // error 类型"string"上不存在属性"join"
handleData(false); // error 类型"boolean"的参数不能赋给类型"number"的参数。