一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
函数的参数类型
声明函数时,可以在每个参数后添加类型注解,以声明函数接受的参数类型:
function fn(name: string) {
const res = name.toLowerCase()
}
fn(100)//报错
函数的返回值类型
我们也可以添加返回值的类型注解,这个注解出现在函数列表的后面:
function count(num1: number, num2: number): number {
return num1 + num2
}
和变量的类型注解一样,我们通常情况下不需要返回类型注解,因为TypeScript会根据 return 返回值推断函数的返回类型
匿名函数的参数
匿名函数与函数声明会有一些不同:当一个函数出现在TypeScript可以确定该函数会被如何调用的地方时,该函数的参数会自动指定类型
const list = ["zhangsan", "lisi", "wangwu"];
list.forEach(item => {
let itemRes = item.toLowerCase(); // 并没有指定item的类型,但是item是一个string类型:
})
TypeScript会根据forEach函数的类型以及数组的类型推断出item的类型;这个过程称之为上下文类型(contextual typing),因为函数执行的上下文可以帮助确定参数和返回值的类型;
参数为对象类型
如果我们需要限制一个函数接受的参数是一个对象类型:
//使用了一个对象来作为类型
//对象里可以添加属性,并且告知TypeScript该属性需要是什么类型,
//属性间用“,” 或“;”隔开。每个属性的类型部分也是可选的,如果不指定,那么就是any类型;
function fn(p: {lng: number, lat: number}) {
console.log("经度", p.lng);
console.log("纬度", p.lat);
}
fn({lng: 120, lat: 30})
对象类型也可以指定哪些属性是可选的,可以在属性的后面添加一个?:
function fn(p: {lng: number, lat: number, id?: string}) {
console.log("经度", p.lng);
console.log("纬度", p.lat);
if (p.id) {
console.log("当前id", p.id);
}
}
fn({lng: 120, lat: 30});
fn({lng: 120, lat: 30, id: "1-1"});