TypeScript - 函数:初学者指南
你好,有抱负的程序员们!今天,我们将踏上一段激动人心的旅程,探索 TypeScript 函数的世界。如果你之前从未编写过一行代码,也不用担心——我将作为你的友好向导,我们会一步一步地学习。在本教程结束时,你将会惊讶于在 TypeScript 中使用函数能做些什么!
函数是什么?
在我们深入了解之前,让我们先了解一下函数是什么。可以把函数想象成一个可重用的食谱。就像你按照食谱来烤蛋糕一样,函数是一组在程序中执行特定任务的指令。
下面是在 TypeScript 中的一个简单函数:
function greet(name: string): string {
return `你好,${name}!`;
}
console.log(greet("Alice")); // 输出:你好,Alice!
在这个例子中,greet
是我们的函数。它接收一个 name
作为输入,并返回一个问候信息。参数后面的 : string
和括号后面的 : string
表示这个函数接收一个字符串作为输入并返回一个字符串。
可选参数
有时候,你可能想要让一个参数变为可选的。在 TypeScript 中,你可以通过在参数名后加上 ?
来实现。
function introduce(name: string, age?: number): string {
if (age) {
return `嗨,我是${name},我${age}岁了。`;
} else {
return `嗨,我是${name}。`;
}
}
console.log(introduce("Bob")); // 输出:嗨,我是Bob。
console.log(introduce("Charlie", 30)); // 输出:嗨,我是Charlie,我30岁了。
在这个函数中,age
是可选的。如果提供了它,我们会包含在介绍中;如果没有提供,我们会跳过。
剩余参数
剩余参数允许你将多个参数作为一个数组来处理。就像是说:“我不知道你会给我多少食材,但我会把它们全部用在我的食谱中!”
function makeShake(...fruits: string[]): string {
return `我做了个奶昔,里面有${fruits.join(", ")}。`;
}
console.log(makeShake("香蕉")); // 输出:我做了个奶昔,里面有香蕉。
console.log(makeShake("草莓", "芒果", "奇异果")); // 输出:我做了个奶昔,里面有草莓, 芒果, 奇异果。
...fruits
语法告诉 TypeScript 将所有提供的参数放入一个名为 fruits
的数组中。
默认参数
默认参数就像是有个备用计划。如果有人没有提供值,我们会使用一个默认值。
function orderCoffee(size: string = "中杯", type: string = "拿铁"): string {
return `你点了一杯${size}的${type}。`;
}
console.log(orderCoffee()); // 输出:你点了一杯中杯的拿铁。
console.log(orderCoffee("大杯")); // 输出:你点了一杯大杯的拿铁。
console.log(orderCoffee("小杯", "浓缩咖啡")); // 输出:你点了一杯小杯的浓缩咖啡。
如果你没有指定大小或类型,默认会是一杯中杯的拿铁。多么方便!
匿名函数
匿名函数就像秘密特工——它们没有名字!当你需要一个只用一次的快速函数时,通常会用到它们。
let greet = function(name: string): string {
return `你好,${name}!`;
};
console.log(greet("David")); // 输出:你好,David!
在这里,我们将一个匿名函数赋值给变量 greet
。然后我们可以像普通函数一样使用 greet
。
函数构造器
函数构造器是一种动态创建函数的方法。就像是建造一个可以基于你给它的指令执行任务的机器人。
let multiply = new Function('a', 'b', 'return a * b');
console.log(multiply(4, 5)); // 输出:20
在这个例子中,我们创建了一个可以乘以两个数的函数。最后一个参数总是函数体,其余的是参数名。
递归与 TypeScript 函数
递归是指一个函数调用自身。就像是俄罗斯套娃——每个娃娃都包含一个更小的自己。
function countdown(n: number): void {
if (n <= 0) {
console.log("发射!");
} else {
console.log(n);
countdown(n - 1);
}
}
countdown(3);
// 输出:
// 3
// 2
// 1
// 发射!
这个函数从给定的数字倒数到零。它会不断调用自己,每次调用时数字都会减小,直到达到零。
Lambda 函数
Lambda 函数,也称为箭头函数,是编写函数的一种简写方式。它们就像是函数的短信缩写!
let add = (a: number, b: number): number => a + b;
console.log(add(3, 4)); // 输出:7
这种紧凑的语法对于编写简短、简单的函数尤其有用。
语法变体
TypeScript 提供了多种定义函数的方式。下面是一个总结不同语法的表格:
语法 | 示例 |
---|---|
函数声明 |
function greet(name: string): string { return 你好,${name}!; }
|
函数表达式 |
let greet = function(name: string): string { return 你好,${name}!; };
|
箭头函数 |
let greet = (name: string): string => 你好,${name}!;
|
对象中的方法 |
let obj = { greet(name: string): string { return 你好,${name}!; } };
|
异步函数 | async function fetchData(): Promise<void> { /* ... */ } |
函数重载
函数重载允许你为同一个函数定义多个函数签名。就像是根据你拥有的食材不同,为同一道菜定义多个食谱。
function makeNoise(animal: "cat"): string;
function makeNoise(animal: "dog"): string;
function makeNoise(animal: string): string {
switch(animal) {
case "cat":
return "喵喵";
case "dog":
return "汪汪";
default:
return "未知动物";
}
}
console.log(makeNoise("cat")); // 输出:喵喵
console.log(makeNoise("dog")); // 输出:汪汪
这个函数可以处理不同类型的动物并发出相应的声音。
就是这样!我们今天涵盖了了很多内容,从基本的函数到更高级的概念,如递归和函数重载。记住,学习编码就像学习一门新语言——它需要练习和耐心。不要害怕尝试这些概念并创建你自己的函数。在你意识到之前,你将能够轻松地编写复杂的程序。快乐编码,我们下节课见!
Credits: Image by storyset