三、函数
TypeScript提供了丰富的函数类型定义方式,可以对函数参数、返回值进行类型注解,从而提供了更为强大的类型检查。
1.函数声明
在TypeScript中,你可以在函数声明中对函数的参数和返回值进行类型注解。以下是一个例子:
function add(x: number, y: number): number { return x + y;}
在这个例子中,我们定义了一个add函数,它接受两个参数x和y,这两个参数都是number类型,函数的返回值也是number类型。
如果你尝试调用这个函数并传入一个非数字类型的参数,TypeScript编译器会报错:
add("Hello", 1); // Error: Argument of type '"Hello"' is not assignable to parameter of type 'number'.
2.函数表达式
在JavaScript中,函数不仅可以通过函数声明的方式定义,还可以通过函数表达式定义。在TypeScript中,函数表达式也可以使用类型注解:
let myAdd: (x: number, y: number) => number = function(x: number, y: number): number { return x + y; };
在上面的例子中,我们首先定义了myAdd变量的类型为一个函数类型(x: number, y: number) => number,然后将一个匿名函数赋值给myAdd。这个匿名函数的参数x和y的类型是number,返回值的类型也是number。
3.可选参数和默认参数
TypeScript支持可选参数和默认参数。你可以使用?来标记可选参数,或者使用= 来指定参数的默认值:
function buildName(firstName: string, lastName?: string) { if (lastName) return firstName + " " + lastName; else return firstName;} let result1 = buildName("Bob"); // works correctly nowlet result2 = buildName("Bob", "Adams"); // ah, just right
在上面的例子中,lastName是一个可选参数。你可以不传这个参数调用buildName函数。
function buildName(firstName: string, lastName = "Smith") { return firstName + " " + lastName;} let result1 = buildName("Bob"); // returns "Bob Smith"let result2 = buildName("Bob", "Adams"); // returns "Bob Adams"
在上面的例子中,lastName有一个默认值"Smith"。如果你不传这个参数调用buildName函数,lastName的值将是"Smith"。
4.剩余参数(Rest Parameters)
当你不知道要操作的函数会有多少个参数时,TypeScript提供了剩余参数的概念。与JavaScript一样,你可以使用三个点...定义剩余参数:
function buildName(firstName: string, ...restOfName: string[]) { return firstName + " " + restOfName.join(" "); } let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");
在上面的例子中,restOfName就是剩余参数,它可以接受任意数量的参数。
带你读《现代TypeScript高级教程》三、函数(2)https://developer.aliyun.com/article/1348559?groupCode=tech_library