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

相关推荐
今晚一定早睡1 小时前
new操作符
前端·javascript·typescript
爱编程的喵1 小时前
JavaScript数组高级玩法:从入门到放弃再到精通
javascript
骑驴看星星a1 小时前
定时器与间歇函数
javascript·redis·学习·mysql·oracle
拉不动的猪1 小时前
针对初学者的JS八种类型实用小技巧总结
javascript·css·面试
1 小时前
Android本地浏览PDF(Android PDF.js 简要学习手册)
android·javascript·pdf
拉不动的猪2 小时前
Vue 3 中 async setup () 的「坑」与避坑指南1
前端·javascript·面试
。puppy3 小时前
暑假--作业3
前端·javascript·css
胡gh3 小时前
一篇文章,带你搞懂大厂如何考察你对Array的理解
javascript·后端·面试
胡gh3 小时前
this 与 bind:JavaScript 中的“归属感”难题
javascript·设计模式·程序员
OEC小胖胖4 小时前
前端性能优化“核武器”:新一代图片格式(AVIF/WebP)与自动化优化流程实战
前端·javascript·性能优化·自动化·web