《四》TypeScript 中类的类型定义

这篇具有很好参考价值的文章主要介绍了《四》TypeScript 中类的类型定义。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

类可以作为其实例对象的类型。

class Person {}

// Person 类可以作为其实例对象 p 的类型
const p: Person = new Person()

类也可以被当做是一个构造函数。

class Person {}

// 传入的参数要求是一个构造函数
function factory(callback: new () => void) {
  const p = new callback()
  return p
}
// Person 可以被当做是一个构造函数传入。因为它也可以通过 new 操作符调用,产生一个对象
factory(Person)

类的属性必须明确声明:

在 TypeScript 中,类的属性必须要明确声明,否则会报错。

class Person {
  // 在 TypeScript 中类的属性必须要明确声明,否则会报错。声明属性的同时可以初始化值;或者也可以直接初始化值,此时会默认进行类型推断
  name: string
  age: number = 18
  height = 1.88
 
  constructor(name: string, age: number, height: number) {
    this.name = name
    this.age = age
    this.height = height
  }

  // 方法的写法和 JavaScript 中一样
  eating() {
    console.log(this.name + 'is eating')
  }
}

const p = new Person('Lee', 18, 1.88)
console.log(p.name)
class Student extends Animal {
    score: number
   
	constructor(name: string, age: number, height: number, score: number) {
	    super(name, age, height)
	    // 添加子类自己的属性
   		this.score = score
   }
   
    // 添加子类自己的方法
	studying() {
		console.log(this.name + 'is studying')
	}
}

类的属性的修饰符:

在 TypeScript 中,类的属性和方法支持三种修饰符。添加之后,TypeScript 将会检测该成员在哪些地方可见。

  1. public:修饰的是在任何地方可见、公有的属性和方法。public 是默认的修饰符。
  2. private:修饰的是仅在当前类的内部可见的、私有的属性和方法。
  3. protected:修饰的是仅在当前类自身及其子类中可见的、受保护的属性和方法。
class Person {
  private name: string

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

  eating() {
    console.log(this.name + 'is eating') // 正确。可以访问
  }
}

const p = new Person('Lee')
console.log(p.name) // 报错。不可访问

类的只读属性:

在 TypeScript 中,支持类的只读属性 readonly。添加之后,TypeScript 将会检测该属性只可读、不可写。

class Person {
  readonly name: string

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

const p = new Person('Lee')
console.log(p.name) // 正确。可读
p.name = 'Mary' // 报错。不可写

类的参数属性:

在构造函数的参数前面直接添加修饰符,TypeScript 就可以将其转成一个同名同值的类的属性,这些就被称为参数属性。

参数属性可以看作是一种语法糖,相当于做了三件事:

  1. 创建一个同名的类的属性。
  2. 将值赋值给该属性。
  3. 声明属性,且为其添加上修饰符。
class Person {
  constructor(public name: string) {}
}

// 就相当于:
class Person {
  public name: string

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

抽象类:

TypeScript 中支持抽象类和抽象方法,需要使用 abstract 关键字来声明。

对于如果有共同的父类,但是父类中不需要对某些方法进行具体的实现的时候,就可以将其定义为抽象类。抽象方法必须定义在抽象类中,只有方法名,没有方法体。子类必须实现抽象方法。

抽象类不能用来创建对象,是专门用来被继承的类。
抽象类中可以包含抽象方法,也可以包含普通的方法。文章来源地址https://www.toymoban.com/news/detail-490328.html

//定义一个抽象类和抽象方法
abstract class Shape {
  abstract getShape()
}

// 子类继承抽象类
class React extends Shape{
  constructor(public width: number, public height: number) {
    super()
  }

  // 子类实现抽象方法
  getShape() {
    return this.width * this.height
  }
}

// 子类继承抽象类
class circle extends Shape{
  constructor(public radius: number) {
    super()
  }

  // 子类实现抽象方法
  getShape() {
    return 2 * Math.PI * this.radius
  }
}

// 此处的 Shape,相当于父类的引用指向子类的对象,这就叫做多态
function calcArea(shape: Shape) {
  return shape.getShape()
}
console.log(calcArea(new React(10, 20)))
console.log(calcArea(new circle(10)))

到了这里,关于《四》TypeScript 中类的类型定义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【TypeScript】中定义与使用 Class 类的解读理解

    类是用于创建对象的模板。他们用代码封装数据以处理该数据。JavaScript 中的类建立在原型上,但也具有某些语法和语义未与 ES5 类相似语义共享。 TypeScript 除了实现了所有 ES6 中的类的功能以外,还添加了一些新的用法。 关于 ES6的 Class 类语法概念 ,在本章节不做过多阐述,

    2024年02月14日
    浏览(40)
  • 浅谈PHP框架中类成员方法的类类型形参是怎么利用ReflectionClass反射类自动实例化的(应该是全网首发)

    1. 或许是全网首发,我翻过很多文章,从未有一个博主讲过这个东西,很多博主只讲了IOC、DI和反射机制的常见用法,因类类型形参反射的巧妙用法有相当高的难度和学习盲区,所以从未有人讲过类类型的形参它怎么就被自动实例化的。 2. 在Laravel框架,或者是其它框架中,类

    2024年02月06日
    浏览(48)
  • Golang 中哪些类型可以作为 map 类型的 key?

    目录 可以作为 map 键的类型 不能作为 map 键的类型 最佳实践 小结 在 Go 语言中,map 是一种内置的关联数据结构类型,由一组无序的键值对组成,每个键都是唯一的,并与一个对应的值相关联。本文将详细介绍哪些类型的变量可以作为 map 的键,并通过实例进行说明。 因为

    2024年01月25日
    浏览(41)
  • TypeScript 可以进行类型编程,这会极大提高 TypeScript 在复杂场景下的应用场景。

    我们来看一下 TypeScript 中的泛型,这也是很多同学觉得 TypeScript 很难的最大原因。 首先我们看下面的代码,我们定一个 idientity0 函数,这个函数逻辑非常简单,就是直接返回参数,那么我们怎么确定返回值的类型呢? 因为输入值可以是任意属性,所以我们只能写出 identity0

    2024年02月13日
    浏览(36)
  • 面向对象——python中类的创建

    面向对象编程——Object Oriented Programming,简称 OOP ,是一种以对象为中心的程序设计思想。很多高级开发语言都是面向对象的,例如,如雷贯耳的Java、谷歌新推的Kotlin、开发iOS的Objective-C、苹果新推的Swift,以及C++、C#等都是面向对象的。Python也不例外,这篇文章将介绍python中

    2024年02月03日
    浏览(35)
  • Python中类的继承细讲

      在编写类时,并不是每次都要从空白开始。当要编写的类和另一个已经存在的类之间 存在一定的继承关系 时,就可以 通过继承来达到代码重用 的目的,提高开发效率。下面将介绍如何在 Python 中实现 继承 。    继承 是 面向对象编程最重要的特性之一 ,它源于人们认

    2024年02月06日
    浏览(36)
  • 简述java中类的创建过程

    1. 创建步骤 我们要用代码创建一个类,可以按如下几个步骤进行实现: 1. 确定类名; 2. 编写成员变量; 3. 编写成员方法。 通过以上步骤,一个类就可以创建出来了。 2. 基本语法 在 Java 中,定义一个类需要使用 class 、类名和一对表示程序体的大括号,基本语法如下

    2024年02月09日
    浏览(39)
  • 面试官:说说TypeScript扩展类型定义

    这是我整理的学习资料,非常系统和完善,欢迎一起学习 现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 linwu的算法笔记📒 在 TypeScript 中,我们可以通过声明文件( .d.ts 文件)来为现有的 JavaScript 库提供类型定义,或者为现有的类型添加额外的属性和方法。这个过

    2024年02月09日
    浏览(42)
  • 【知识点】python中类的相互调用

    在 Python 中,类可以相互调用。这意味着一个类可以访问另一个类的方法或属性。下面是几个例子: 在同一个文件内,不同类的相互调用例子如下: 代码 在上面的代码中, Dealership 类调用了 Car 类。它通过创建一个 Car 对象来添加汽车,并通过循环遍历汽车列表来显示汽车的

    2023年04月10日
    浏览(36)
  • C++中类的6个默认成员函数 【拷贝构造函数】

    在前几章学习对象的时候,我们有的时候需要一个与已存在对象一某一样的新对象 那在创建对象时,可否创建一个与已存在对象一某一样的新对象呢? 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时

    2024年02月20日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包