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日

相关文章

  • windowsthinpc体验&语言包更改(win7included)

    Windowsthinpc体验&语言包更改(win7included) 如果您想要在低配置电脑上获得更好的性能和更快的启动速度,那么使用Windowsthinpc操作系统是一个不错的选择。Windowsthinpc是专门为低端电脑和网络电脑设计的操作系统,具有轻便、快速、易于部署等优点。 Windowsthinpc的优势 比起Windows 7,Wi…

    其他 2023年3月29日
    00
  • 少儿编程Scratch第一讲:Scratch完美的初体验

    下面是关于少儿编程Scratch第一讲的完整攻略,包括Scratch的基本介绍、使用方法和两个示例说明。 Scratch的基本介绍 Scratch是一款由麻省理工学院开发的少儿编程语言,它采用图形化编程界面,使得编程变得简单易学。Scratch的主要特点包括: 图形化编程界面,易于上手; 支持多种编程概念,如循环、条件语句、变量等; 内置丰富的素材库,如角色…

    other 2023年5月6日
    00
  • C语言中带头双向循环链表基本操作的实现详解

    C语言中带头双向循环链表基本操作的实现详解 什么是带头双向循环链表 带头双向循环链表是一种常见的数据结构,在实际开发中也经常会用到。带头双向循环链表可以看作是一种特殊的链表,相对于普通链表,它具有以下特点: 它有一个头结点,头结点不存储数据,它的作用是指向链表中的第一个节点。 每个节点都有一个前驱指针prev和一个后继指针next,用于指向前一个节点和后一个…

    other 2023年6月27日
    00
  • Android drawFunctor 原理及应用详情

    Android drawFunctor原理及应用详情 什么是drawFunctor drawFunctor是Android系统提供的一个机制,用于在渲染过程中保存、执行一些绘制操作。drawFunctor的核心是一个函数指针,该指针指向一个可以被执行的函数或方法,这个函数或方法封装了初始绘制数据和重绘时更新数据的操作。 drawFunctor的应用 draw…

    other 2023年6月26日
    00
  • 在go中使用http.newrequest处理错误

    在Go中使用http.NewRequest处理错误 在Go中,我们可以使用http.NewRequest函数创建HTTP请求。但是,如果我们不小心处理错误,可能会导致程序崩溃或出现其他问题。本攻略将介绍何在Go中使用http.NewRequest处理错误,并提供两个示例。 处理错误 在Go中,我们可以使用http.NewRequest函数创建请求。该函数返回…

    other 2023年5月9日
    00
  • nginx常用内置变量

    以下是关于“nginx常用内置变量”的完整攻略,包括基本概念、常用内置变量、示例说明和注意事项。 基本概念 Nginx是一款高性能的Web服务器和反向代理服务器,常用于构建高并发、高可用的Web应用。在Nginx中,内置变量是一种特殊的变量,可以在配置文件中使用,用于获取请求的相关信息。 常用内置变量 以下是Nginx中常用的内置变量: $request_u…

    other 2023年5月7日
    00
  • Android.bp语法和使用方法讲解

    Android.bp语法和使用方法讲解 什么是Android.bp文件 Android.bp是一个Makefile与Blueprints的结合。 Makefile是一个类Unix系统的编译构建最常用的工具之一。使用Makefile可以定义目标和规则,递归的去解决目标之间的依赖关系,实现自动化构建的过程。 Blueprints是Google提出的Android…

    other 2023年6月26日
    00
  • 7种方法解决Win11和Win10中谷歌Chrome浏览器速度慢问题

    7种方法解决Win11和Win10中谷歌Chrome浏览器速度慢问题 如果你在 Windows 10 或 Windows 11 操作系统中使用谷歌 Chrome 浏览器时,遇到了速度缓慢的问题,可以尝试以下七种方法来解决。 方法一:使用最新版本的 Chrome 浏览器 确保你使用的是最新版本的 Chrome 浏览器。通过在浏览器中点击三个点图标,选择“帮助”…

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