函数
定义函数类型,有三种方式
(一) 传统型
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"的参数。