TypeScript中的函数和类你了解吗

当谈及JavaScript的类型系统时,TypeScript就成为了开发者的一个选择。TypeScript是一种编程语言,可以编译成JavaScript,它包括JavaScript的所有特性,同时带来了很多其他优势,例如静态类型检测、类型推断、接口、类、命名空间、泛型等等。在这篇文章中,我们将重点讨论TypeScript中的函数和类。

函数

函数式编程

JavaScript已经越来越多的支持函数式编程,而TypeScript进一步扩展了这项功能。一个函数可以视为输入值到输出值的映射,而且在TypeScript中,函数还可以是对象的一等公民。

例如,下面这个简单的函数将两个数相加:

function add(a: number, b: number): number {
  return a + b;
}

这里,函数名是add,它的两个参数都是数字类型,函数会返回两个数字的和。在函数的最后,我们返回了a + b的结果,它的类型是number。我们可以使用函数的类型声明来指定这个函数需要什么类型的参数,和应该返回什么类型的数据。

箭头函数

箭头函数是另一种定义函数的方式,它们使用更少的语法,并且更容易读懂,特别是当函数被定义为一个表达式的时候。下面是一个箭头函数的例子:

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

这个例子定义了一个名为greet的函数,接受一个字符串参数name,并返回一个模板字符串。这个箭头函数返回的类型是string,跟这个函数的参数是一致的。可以使用参数列表和返回类型指定出函数的签名。

可选参数和默认参数

在TypeScript中,函数可以定义可选参数或默认参数。可选参数声明跟普通参数一样,但在参数名后面加上一个问号?,而默认参数会在定义参数时指定,它们代表了函数的默认值。

function buildName(firstName: string, lastName = 'Smith'): string {
  if (firstName) {
    return firstName + ' ' + lastName;
  } else {
    return lastName;
  }
}

name1 = buildName('Bob');  // 返回 "Bob Smith"
name2 = buildName('Bob', 'Adams');  // 返回 "Bob Adams"
name3 = buildName(null);  // 返回 "Smith"

在这个例子中,我们定义了一个函数buildName,它有两个参数,firstNamelastName (默认值为'Smith')。当我们给firstName传递一个值,那么函数就会返回全名,如果没有传递,就会返回'Smith'

剩余参数

TypeScript中还引入了剩余参数的概念,这意味着一个函数可以接收一个任意数量的参数,把它们放入一个数组中,并在函数中进行操作。下面是定义一个剩余参数的函数的例子:

function buildName(firstName: string, ...restOfName: string[]): string {
  return firstName + " " + restOfName.join(" ");
}

let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

这个例子定义了一个函数buildName,它的第一个参数是一个字符串firstName,后面定义了一个不确定数量的字符串参数,参数在函数内被整合成一个数组restOfName。在这个函数中,我们使用了join方法和空格作为参数,将数组中所有值以空格连接,并最终返回拼接后的字符串。

简介

JavaScript中经常会使用面向对象的编程方式来组织代码,而TypeScript支持这种方式,并且可以使用类的语言特性来实现更强大、更容易重用的代码。

class Greeter {
  greeting: string;

  constructor(message: string) {
    this.greeting = message;
  }

  greet() {
    return `Hello, ${this.greeting}!`;
  }
}

const myGreeter = new Greeter('world');
console.log(myGreeter.greet());  // 输出 "Hello, world!"

这个例子定义了一个名字叫做Greeter的类,它有一个名为greeting的成员变量和一个名为greet的方法,当greet被调用时,它会在greeting前加上"Hello, ",然后返回一个拼接后的字符串。我们还定义了一个构造函数,它会被调用来初始化greeting

当我们创建一个myGreeter对象时,它调用了我们的构造函数,并将一个初始值'world'传入为message。我们可以调用类的成员方法(greet),或者直接访问类的成员变量(greeting)。

继承

通过继承,在类之间共享代码是常见的。在TypeScript中,我们使用extends这个关键字来创建一个子类,子类支持继承父级类的属性和方法。

class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  move(distance: number) {
    console.log(`${this.name} moved ${distance}m.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }

  bark() {
    console.log(`Woof! Woof!`);
  }
}

const myDog = new Dog('Rover');
myDog.bark();  // 输出 "Woof! Woof!"
myDog.move(10);  // 输出 "Rover moved 10m."

在这个例子中,我们定义了一个名为Animal的类,它有一个名为name的成员变量和一个名为move的方法。然后,我们定义了一个名为Dog的子类,它继承了Animal类,并新增了一个名为bark的方法。

当我们创建一个Dog对象时,它调用父类的constructor,并将name作为参数传递进去。我们也可以调用子类的bark方法和父类的move方法。

修饰符

TypeScript中引入了修饰符的概念,它们可以控制类的访问权限。我们可以在变量或函数前面添加publicprivateprotected,来确定其可见性。

  • public: 修饰的成员在类内和类外都能访问,这也是默认的修饰符。
  • private: 修饰符的成员只能在类内部访问。
  • protected: 修饰的成员可以在类内部和子类中访问,但不能在类外部被访问。
class Animal {
  protected name: string;

  constructor(name: string) {
    this.name = name;
  }

  protected move(distance: number) {
    console.log(`${this.name} moved ${distance}m.`);
  }
}

class Dog extends Animal {
  private breed: string;

  constructor(name: string, breed: string) {
    super(name);
    this.breed = breed;
  }

  bark() {
    console.log(`Woof! Woof!`);
  }

  jump(distance: number) {
    this.move(distance);
    console.log(`I'm a ${this.breed}, and I jumped!`);
  }
}

const myDog = new Dog('Rover', 'Beagle');
myDog.bark();  // 输出 "Woof! Woof!"
myDog.jump(10);  // 输出 "Rover moved 10m. I'm a Beagle, and I jumped!"

在这个例子中,我们定义了一个名为Animal的类,并在其内部和构造函数上使用protected修饰符。我们还定义了一个名为Dog的子类,它使用了private修饰符和一个新的函数jump,该函数在类内部调用move来改变Dog实例的位置。在Dog类的实例上,我们可以调用barkjump方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:TypeScript中的函数和类你了解吗 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • Altera Quartus II 15.0安装

    Altera Quartus II 15.0安装 Altera Quartus II是一款著名的FPGA开发工具,用于构建数字电路系统的设计和仿真。本文将介绍如何在Windows系统上安装Altera Quartus II 15.0版本。 安装前准备 在开始安装之前,您需要做好以下准备工作: 确保您的计算机符合Altera Quartus II 15.0的最…

    其他 2023年3月28日
    00
  • 微信“xxx撤回了一条消息并亲了你一下”玩法教程

    微信“xxx撤回了一条消息并亲了你一下”玩法教程 简介 微信“xxx撤回了一条消息并亲了你一下”是一种有趣的玩法,可以给聊天对方带来惊喜和乐趣。当你撤回一条消息时,会自动发送一条“xxx撤回了一条消息并亲了你一下”的提示消息,并附带一个亲吻表情。下面是详细的攻略教程。 步骤 发送消息:首先,你需要发送一条消息给聊天对方。可以是文字、图片、表情等任意类型的消息…

    other 2023年8月6日
    00
  • upupoo无法使用怎么办 upupoo打不开解决方法攻略大全

    upupoo无法使用怎么办 upupoo打不开解决方法攻略大全 如果你在使用upupoo时遇到了无法使用或者打不开的情况,不要着急,下面我将为你提供一些可能的解决方法。 确认网络环境是否正常 首先,需要确认你的网络环境是否正常。请检查你的网络连接是否可用,确保你的设备已连接到可用的网络,并尝试使用其他网站或应用程序。 清除浏览器缓存和Cookie 如果网络环…

    other 2023年6月27日
    00
  • Win10禁止生成系统错误内存转储文件图文详解

    Win10禁止生成系统错误内存转储文件攻略 在Windows 10操作系统中,系统错误内存转储文件(也称为蓝屏转储文件)是用于诊断系统崩溃和错误的重要工具。然而,有时候我们可能希望禁止系统生成这些转储文件,特别是在磁盘空间有限或者隐私安全方面的考虑。下面是禁止生成系统错误内存转储文件的详细攻略。 步骤一:打开系统属性设置 首先,右键点击桌面上的“此电脑”图标…

    other 2023年8月1日
    00
  • flash怎么设计铅笔人拆分又组合的动画?

    首先,我们需要了解几个基础概念: 形状(Shape):包含了线条、填充和样式的图形对象。 画笔(Brush):用于绘制形状的工具,包括钢笔工具、直线工具、椭圆工具等。 描边(Stroke):绘制形状边缘的外边框。 填充(Fill):填充形状内部的颜色或图案。 运动(Motion):形状或对象的移动、旋转、缩放等。 动画(Animation):对形状或对象进行…

    other 2023年6月27日
    00
  • mysql 增加修改字段类型及删除字段类型

    下面是关于MySQL增加、修改和删除字段类型的完整攻略: 增加字段类型 要在MySQL中添加新的字段类型,需要使用ALTER TABLE语句并指定ADD COLUMN子句。下面是添加新字段类型的示例: ALTER TABLE students ADD COLUMN birthday DATE; 以上代码将在名为students的表中添加名为birthday的…

    other 2023年6月25日
    00
  • Oracle密码过期如何取消密码180天限制及密码180天过期,账号锁住的问题

    下面是针对Oracle密码过期的取消、账号锁定等常见问题的完整攻略: Oracle密码过期取消及密码过期问题处理 密码过期取消 有时候在登录Oracle数据库时会提示密码过期,此时用户需要修改密码才能登录,否则会因为账号被锁定而无法登录。出于安全考虑,Oracle默认情况下设定了密码的有效期限制,时间为180天。然而,对于一些临时安装或测试数据库,这个限制可…

    other 2023年6月27日
    00
  • 安卓/iOS版Skype 6.0正式发布及提供下载地址

    安卓/iOS版Skype 6.0正式发布及提供下载地址攻略 Skype是一款广受欢迎的即时通讯和语音通话应用程序。最新版本的Skype 6.0已经正式发布,并提供了安卓和iOS版的下载。本攻略将详细介绍如何下载和安装Skype 6.0,并提供下载地址。 下载和安装Skype 6.0 打开安卓或iOS设备上的应用商店(Google Play Store或App…

    other 2023年8月4日
    00
合作推广
合作推广
分享本页
返回顶部