11 为函数和函数参数定义类型
本小节我们来学习函数类型的定义,以及对函数参数的详细介绍。前面我们在讲object例子的时候见过简单的函数定义,在那个例子中我们学习了如何简单地为一个参数指定类型。在本小节你将学习三种定义函数类型的方式,以及关于参数的三个知识——即可选参数、默认参数和剩余参数。接下来我们开始学习。 2.8.1. 函数类型 (1) 为函数定义类型 我们可以给函数定义类型,这个定义包括对参数和返回值的类型定义,我们先来看简单的定义写法: function add(arg1: number, arg2: number): number { return x + y; } // 或者 const add = (arg1: number, arg2: number): number => { return x + y; }; 在上面的例子中我们用function和箭头函数两种形式定义了add函数,以展示如何定义函数类型。这里参数 arg1 和 arg2 都是数值类型,最后通过相加得到的结果也是数值类型。 如果在这里省略参数的类型,TypeScript 会默认这个参数是 any 类型;如果省略返回值的类型,如果函数无返回值,那么 TypeScript 会默认函数返回值是 void 类型;如果函数有返回值,那么 TypeScript 会根据我们定义的逻辑推断出返回类型。 (2) 完整的函数类型 一个函数的定义包括函数名、参数、逻辑和返回值。我们为一个函数定义类型时,完整的定义应该包括参数类型和返回值类型。上面的例子中,我们都是在定义函数的指定参数类型和返回值类型。接下来我们看下,如何定义一个完整的函数类型,以及用这个函数类型来规定一个函数定义时参数和返回值需要符合的类型。先来看例子然后再进行解释: let add: (x: number, y: number) => number; add = (arg1: number, arg2: number): number => arg1 + arg2; add = (arg1: string, arg2: string): string => arg1 + arg2; // error 上面这个例子中,我们首先定义了一个变量 add,给它指定了函数类型,也就是(x: number, y: number) => number,这个函数类型包含参数和返回值的类型。然后我们给 add 赋了一个实际的函数,这个函数参数类型和返回类型都和函数类型中定义的一致,所以可以赋值。后面我们又给它赋了一个新函数,而这个函数的参数类型和返回值类型都是 string 类型,这时就会报如下错误:...