当前位置: 首页 > news >正文

【TS系列】TypeScript进阶(三)

走进TypeScript

  • 章节回顾:
  • 【TS系列】初识TypeScript
  • 【TS系列】TypeScript之基本类型
  • 【TS系列】TypeScript进阶(一)
  • 【TS系列】TypeScript进阶(二)
    • 一、TypeScript 类
      • 1. 类的属性与方法
      • 2. 访问器
      • 3. 类的继承
      • 4. ECMAScript 私有字段
  • 小结

章节回顾:

【TS系列】初识TypeScript

【TS系列】TypeScript之基本类型

【TS系列】TypeScript进阶(一)

【TS系列】TypeScript进阶(二)

如果文章有什么需要改进的地方还请大佬不吝赐教👏👏
在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

一、TypeScript 类

1. 类的属性与方法

在面向对象语言中,类是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述了所创建的对象共同的属性和方法。

在 TypeScript 中,我们可以通过 Class 关键字来定义一个类:

class Greeter {
  // 静态属性
  static cname: string = "Greeter";
  // 成员属性
  greeting: string;

  // 构造函数 - 执行初始化操作
  constructor(message: string) {
    this.greeting = message;
  }

  // 静态方法
  static getClassName() {
    return "Class name is Greeter";
  }

  // 成员方法
  greet() {
    return "Hello, " + this.greeting;
  }
}

let greeter = new Greeter("world");

那么成员属性与静态属性,成员方法与静态方法有什么区别呢?这里无需过多解释,我们直接看一下以下编译生成的 ES5 代码:

"use strict";
var Greeter = /** @class */ (function () {
    // 构造函数 - 执行初始化操作
    function Greeter(message) {
        this.greeting = message;
    }
    // 静态方法
    Greeter.getClassName = function () {
        return "Class name is Greeter";
    };
    // 成员方法
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    // 静态属性
    Greeter.cname = "Greeter";
    return Greeter;
}());
var greeter = new Greeter("world");

2. 访问器

在 TypeScript 中,我们可以通过 gettersetter 方法来实现数据的封装和有效性校验,防止出现异常数据。

let passcode = "Hello TypeScript";

class Employee {
  private _fullName: string;

  get fullName(): string {
    return this._fullName;
  }

  set fullName(newName: string) {
    if (passcode && passcode == "Hello TypeScript") {
      this._fullName = newName;
    } else {
      console.log("Error: Unauthorized update of employee!");
    }
  }
}

let employee = new Employee();
employee.fullName = "Semlinker";
if (employee.fullName) {
  console.log(employee.fullName);
}

3. 类的继承

继承 (Inheritance) 是一种联结类与类的层次模型。指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系。

在 TypeScript 中,我们可以通过 extends 关键字来实现继承:

class Animal {
  name: string;
  
  constructor(theName: string) {
    this.name = theName;
  }
  
  move(distanceInMeters: number = 0) {
    console.log(`${this.name} moved ${distanceInMeters}m.`);
  }
}

class Snake extends Animal {
  constructor(name: string) {
    super(name);
  }
  
  move(distanceInMeters = 5) {
    console.log("Slithering...");
    super.move(distanceInMeters);
  }
}

let sam = new Snake("Sammy the Python");
sam.move();

4. ECMAScript 私有字段

在 TypeScript 3.8 版本就开始支持ECMAScript 私有字段,使用方式如下:

class Person {
  #name: string;

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

  greet() {
    console.log(`Hello, my name is ${this.#name}!`);
  }
}

let semlinker = new Person("Semlinker");

semlinker.#name;
//     ~~~~~
// Property '#name' is not accessible outside class 'Person'
// because it has a private identifier.

与常规属性(甚至使用 private 修饰符声明的属性)不同,私有字段要牢记以下规则:

  • 私有字段以 # 字符开头,有时我们称之为私有名称;
  • 每个私有字段名称都唯一地限定于其包含的类;
  • 不能在私有字段上使用 TypeScript 可访问性修饰符(如 public 或 private);
  • 私有字段不能在包含的类之外访问,甚至不能被检测到。

小结

以上就是关于TypeScript的进阶内容介绍,根据一些参考资料作出总结,如果侵权,请联系删除!!谢谢!
后续将会围绕TypeScript相关内容及其知识点不定期持续更新,感谢一路有你们的关注和陪伴!
(若有错误,请批评改正,谢谢~)

相关文章:

  • 动态内存管理
  • Linux05开机/重启/用户登录注销
  • MySQL索引-2聚集索引探讨
  • 【node.js从入门到精通】模块化+npm包详解
  • Android 面试需要哪些准备?
  • Vue进阶--render函数和jsx的使用
  • 嵌入式 Linux 入门(十、Linux 下的 C 编程)
  • Spring boot 使用QQ邮箱进行一个验证登入
  • <Linux系统复习>命令行参数和环境变量
  • Java框架详解1——Spring的设计思想
  • 【C++】类和对象 (下篇)
  • JAVA【数据库DB 一】
  • 行内元素和块级元素的区别
  • Jenkins配置用户权限
  • smart原则简单案例,java规则引擎使用场景
  • Create React App 使用
  • happypack两次报错的问题
  • JavaScript DOM 10 - 滚动
  • LeetCode18.四数之和 JavaScript
  • nginx 配置多 域名 + 多 https
  • Redash本地开发环境搭建
  • SAP云平台里Global Account和Sub Account的关系
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 产品三维模型在线预览
  • 高程读书笔记 第六章 面向对象程序设计
  • 高性能JavaScript阅读简记(三)
  • 利用jquery编写加法运算验证码
  • 前嗅ForeSpider中数据浏览界面介绍
  • 区块链分支循环
  • 如何胜任知名企业的商业数据分析师?
  • 使用权重正则化较少模型过拟合
  • nb
  • ​油烟净化器电源安全,保障健康餐饮生活
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (利用IDEA+Maven)定制属于自己的jar包
  • (南京观海微电子)——I3C协议介绍
  • (十八)SpringBoot之发送QQ邮件
  • (五)c52学习之旅-静态数码管
  • (一)SpringBoot3---尚硅谷总结
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET delegate 委托 、 Event 事件
  • .NET4.0并行计算技术基础(1)
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @vue/cli脚手架
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [APUE]进程关系(下)
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [git]git命令如何取消先前的配置
  • [LeetCode周赛复盘] 第 310 场周赛20220911
  • [Linux]使用CentOS镜像与rpm来安装虚拟机软件
  • [mysql] mysqldump 导出数据库表