更新于 

函数

对函数进行声明

1
2
let func = () => "whbbit.cn";
// ts会自动推断类型为 let func:() =>string

明确类型赋值

1
let func: Function;

对函数参数的类型限制

1
2
3
4
5
function add(a: number, b: number) {
return a + b;
}

add(1, 2);

参数为可选参数时,可以使用 ? 进行限制,没有参数传参时,默认为 undefined

1
2
3
4
5
6
function add(a: number, b: number, c?: number) {
console.log(c); // undefined
return a + b;
}

add(1, 2);

设置默认参数值

有默认值时,? 需要去除

1
2
3
4
5
6
function add(a: number, b: number, c: number = 20) {
console.log(c); // 20
return a + b;
}

add(1, 2);

对函数返回值的类型限制

ts 可以对函数返回值进行自动推断

1
2
3
let add = (a: number, b: number) => {
return a + b;
};

也可以手动对返回值进行类型限制

1
2
3
let func = (a): void => {
console.log(`接收到了参数 ${a}`);
};
1
2
3
function add(a: number, b: number): number {
return a + b;
}

使用 type 对重复类型声明进行抽离

1
2
3
4
5
6
7
8
9
10
let addUser = (user: { name: string; age: number }): void => {
console.log(`添加用户${user}`);
};

addUser({ name: "whbbit", age: 25 });

let updateUser = (user: { name: string; age: number }): void => {
console.log(`编辑用户${user}`);
};
updateUser({ name: "whbbit1999", age: 25 });

这时我们会发现,有重复的类型声明。我们可以使用 type 对重复的类型声明进行抽离

1
2
3
4
5
6
7
8
9
10
11
type userType = { name: string; age: number };
let addUser = (user: userType): void => {
console.log(`添加用户${user}`);
};

addUser({ name: "whbbit", age: 25 });

let updateUser = (user: userType): void => {
console.log(`编辑用户${user}`);
};
updateUser({ name: "whbbit1999", age: 25 });

对函数结构的定义

1
2
3
4
5
6
let func: (a:number, b: number) => number; // 这里是函数的结构

// 这里是函数的实现
func = (x: number, y:number) {
return x + y
}
1
2
3
4
5
let addUser: (user: { name: string; age: number }) => void;
addUser = (user: { name: string; age: number }) => {
console.log(user);
};
addUser({ name: "whbbit", age: 25 });

可以使用 type 定义函数结构

1
2
3
4
5
6
7
type userType = { name: string; age: number };
type addUserFunc = (user: userType) => void;
let addUser: addUserFunc;
addUser = (user: userType) => {
console.log(user);
};
addUser({ name: "whbbit", age: 25 });

剩余参数的使用

1
2
3
4
5
function sum(...args: number[]): number {
return args.reduce((s, n) => s + n, 0);
}

console.log(sum(1, 2, 3, 4, 5));
1
2
3
4
5
6
function push(arr: any[], ...args: any[]): any[] {
arr.push(...args);
return arr;
}
let arr = push([], 1, 2, true, false);
console.log(arr);