ts语法(三)

76 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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"});