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 类型的参数,并实现了不同的逻辑。

相关推荐
Violet51519 分钟前
ECMAScript规范解读——this的判定
javascript
知识分享小能手1 小时前
Html5学习教程,从入门到精通,HTML5 简介语法知识点及案例代码(1)
开发语言·前端·javascript·学习·前端框架·html·html5
IT、木易1 小时前
大白话React第二章深入理解阶段
前端·javascript·react.js
晚安7201 小时前
Ajax相关
前端·javascript·ajax
bin91531 小时前
DeepSeek 助力 Vue 开发:打造丝滑的单选按钮(Radio Button)
前端·javascript·vue.js·ecmascript·deepseek
那就可爱多一点点2 小时前
超高清大图渲染性能优化实战:从页面卡死到流畅加载
前端·javascript·性能优化
人间打气筒(Ada)4 小时前
ubuntu网络及软件包管理
网络·ubuntu·php
笑虾4 小时前
Docker 自制镜像:Ubuntu 安装 samba+Webmin
ubuntu·docker·samba
十步杀一人_千里不留行5 小时前
React Native 下拉选择组件首次点击失效问题的深入分析与解决
javascript·react native·react.js
Anna_Tong5 小时前
阿里云如何协助解决操作系统兼容性问题
linux·服务器·ubuntu·阿里云·centos·云计算·系统迁移