TypeScript 函数类型
定义函数类型有三种方式
传统型
function addone(arg1: number, arg2: number): number {
return arg1 + arg2;
}
console.log(addone(1, 2)); // 3
// 或者
const result: number = (arg1: number, arg2: number) => {
return arg1 + arg2;
};
接口型
interface addone {
(arg1: number, arg2: number): number;
}
const addone: addone = (arg1: number, arg2: number) => {
return arg1 + arg2;
};
使用别名 type
type addone = (arg1: number, arg2: number) => number;
const addone: addone = (arg1: number, arg2: number) => {
return arg1 + arg2;
};
console.log(addone(1, 2)); // 3
函数参数
可选参数必须要放到最后,通过?来判定
type Add = (x?: number, y: number) => number; // error 必选参数不能位于可选参数后。
type Add2 = (x: number, y?: number) => number; //正确
默认参数
const add = (x: number, y: number = 2) => {
return x + y;
};
剩余参数 解构
const handleData = (arg1, ...args) => {
// 这里省略逻辑
console.log(args);
};
handleData(1, 2, 3, 4, 5); // [ 2, 3, 4, 5 ]
- 举例
const handleData = (arg1: number, ...args: number[]) => {
//
};
handleData(1, "a"); // error 类型"string"的参数不能赋给类型"number"的参数
函数重载
函数重载是指在 TypeScript 中定义一个函数时,可以为该函数提供多个不同的签名,每个签名对应不同的参数类型和返回值类型。
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"的参数。
评论区