# 函数
函数的约束,主要是约束函数的传参与返回值。
有返回值必须要定义函数返回值的类型,没有可以使用void
// 函数声明式
function fn(): string {
let str:string = 'hello'
return str
}
fn();
// 匿名函数
var fn1 = function(): number {
let num:number = 1111
return num
}
fn1();
// 传参
function param(name: string, age: number):void {
let info:string = `${name} ---- ${age}`
console.log(info)
}
param('chang', 18);
# 箭头函数
const param = (age: number):number => age
param(12);
# 可选参数
可传可不传,没传参的时候,它的值就是undefined。在参数后面使用 ?
来表示 可选参数必须放到正常参数后面。
function param2(name: string, age?: number):void {
if (age) {
let info:string = `${name} ---- ${age}`
console.log(info)
} else {
let info:string = `${name} ----年龄保密`
console.log(info)
}
}
param2('chang', 18);
param2('chang');
# 默认参数
为参数提供一个默认值,当用户没有传递这个参数或传递的值是undefined时使用默认值。
这个可以随意放。
可选参数不能和默认参数一起使用。
function param3(name: string, age: number = 18):void {
if (age) {
let info:string = `${name} ---- ${age}`
console.log(info)
} else {
let info:string = `${name} ----年龄保密`
console.log(info)
}
}
param3('chang', 30);
param3('chang');
# 剩余参数
同时操作多个参数,或者不知道要传入多少参数。
可以使用...
来创建一个参数数组进行传参,...
后面跟一个数组。
function param4(name: string, ...ages:number[]):void {
let sum:string
for(let i =0;i<ages.length;i++) {
sum = `${name} ---- ${ages[i]}`
console.log(sum)
}
}
param4('chang', 30);
param4('chang', 12, 124, 11, 44);
// 获取所有参数
function param5(...ages:number[]):void {
let args:IArguments = arguments
console.log(args)
}
# 对象参数
对象参数建议使用接口来定义
interface User {
name:string;
age:number
}
function add(user: User):User {
return User
}
add({name: 'xxx', age: 18})
# 定义this类型
在函数中调用this时ts是可以定义this类型的,这在js是无法使用的。
必须第一个参数来定义这个this类型,传参时忽略掉就行。
interface User {
arr: number[];
add:(this:User, age:number)=>void
}
let user: User = {
arr: [1, 2, 3],
add(this:User, age:number) {
this.arr.push(age)
}
}
user.add(4)