TypeScript 函数

函数基础

在 TypeScript 中,函数的定义方式与 JavaScript 类似,但是可以添加类型注解来增强函数的类型安全性。例如:

typescript 复制代码
function greet(name: string): string {
    return `Hello, ${name}!`;
}

上面的例子定义了一个名为 greet 的函数,接受一个参数 name,类型为 string,并返回一个字符串。通过类型注解,我们告诉 TypeScript 这个函数的输入参数和返回值的类型,从而在编译期间进行类型检查。

可选参数和默认参数

在 TypeScript 中,我们可以使用可选参数和默认参数来使函数调用更加灵活。例如:

typescript 复制代码
function greet(name: string, greeting?: string): string {
    if (greeting) {
        return `${greeting}, ${name}!`;
    } else {
        return `Hello, ${name}!`;
    }
}

greet("Alice"); // 输出:Hello, Alice!
greet("Bob", "Good morning"); // 输出:Good morning, Bob!

上面的例子中,greeting 参数被标记为可选参数,因此在调用函数时可以省略。如果不提供 greeting 参数,则默认使用 "Hello"。

剩余参数

除了可选参数和默认参数之外,TypeScript 还支持剩余参数,允许我们接受任意数量的参数。例如:

typescript 复制代码
function sum(...numbers: number[]): number {
    return numbers.reduce((acc, val) => acc + val, 0);
}

console.log(sum(1, 2, 3, 4, 5)); // 输出:15

在上面的例子中,...numbers 表示剩余参数,它将接受传递给函数的所有参数并将它们收集到一个数组中。

函数类型

在 TypeScript 中,函数也是一种类型,我们可以使用函数类型来声明变量或参数的类型。例如:

typescript 复制代码
type GreetFunction = (name: string) => string;

const greet: GreetFunction = (name) => `Hello, ${name}!`;

console.log(greet("Alice")); // 输出:Hello, Alice!

上面的例子中,我们使用 type 关键字定义了一个名为 GreetFunction 的函数类型,它接受一个 string 类型的参数并返回一个 string 类型的值。然后,我们声明一个名为 greet 的变量,其类型为 GreetFunction,并赋值一个符合该类型的函数。

泛型函数

泛型是 TypeScript 中非常强大和灵活的特性之一,它可以使函数更加通用和灵活。例如:

typescript 复制代码
function identity<T>(arg: T): T {
    return arg;
}

console.log(identity("Hello")); // 输出:Hello
console.log(identity(42)); // 输出:42

在上面的例子中,identity 函数接受一个参数 arg,并返回该参数。通过 <T>,我们声明了一个泛型类型 T,使得该函数可以接受任意类型的参数,并返回相同类型的值。

函数重载

函数重载是指在 TypeScript 中可以根据不同的参数类型或数量来调用同名函数,以实现不同的行为。例如:

typescript 复制代码
function reverse(x: string): string;
function reverse(x: number): number;
function reverse(x: string | number): string | number {
    if (typeof x === "string") {
        return x.split("").reverse().join("");
    } else {
        return Number(x.toString().split("").reverse().join(""));
    }
}

console.log(reverse("hello")); // 输出:olleh
console.log(reverse(12345)); // 输出:54321

在上面的例子中,我们定义了两个函数重载,分别接受 string 类型和 number 类型的参数,并实现了不同的逻辑。

相关推荐
百锦再8 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
百锦再8 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
engchina8 小时前
WSL Ubuntu で Kubernetes v1.34.2 + Docker 環境を構築する
ubuntu·docker·kubernetes
HABuo9 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
颜酱9 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
小迷糊的学习记录10 小时前
Vuex 与 pinia
前端·javascript·vue.js
发现一只大呆瓜10 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
不爱吃糖的程序媛10 小时前
Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南
前端·javascript·flutter
利刃大大10 小时前
【Vue】Element-Plus快速入门 && Form && Card && Table && Tree && Dialog && Menu
前端·javascript·vue.js·element-plus
NEXT0611 小时前
AI 应用工程化实战:使用 LangChain.js 编排 DeepSeek 复杂工作流
前端·javascript·langchain