TypeScript学习笔记(二)——TypeScript 高级类型

目录

1. class 类

1.1 class 关键字的基本使用

1.2 类继承

1.3 类成员可见性

1.4 类成员只读修饰符

2. 类型兼容性

2.1 类型兼容性

2.2 接口兼容性

2.3 函数兼容性

3. 交叉类型

4. 泛型

4.1 创建泛型函数

4.2 泛型约束

4.3 多个泛型的类型变量约束

4.4 泛型接口

4.5 泛型类

4.6 泛型工具类型

① 泛型工具类型 - Partial

② 泛型工具类型 - Readonly

③ 泛型工具类型 - Pick,>

④ 泛型工具类型 - Record,type>

5. 索引签名类型

6. 映射类型


概述:

  • TS 中的高级类型有很多,重点学习以下高级类型:
    • 1. class 类
    • 2. 类型兼容性
    • 3. 交叉类型
    • 4. 泛型 和 keyof
    • 5. 索引签名类型 和 索引查询类型
    • 6. 映射类型

1. class 类

1.1 class 关键字的基本使用

TypeScript 全面支持 ES2015 中引入的 class 关键字,并为其添加了类型注解和其他语法(比如,可见性修饰符等)。
解释:
  • 根据 TS 中的类型推论,可以知道 Person 类的实例对象 p 的类型是 Person。
  • TS 中的 class不仅提供了 class 的语法功能,也作为一种类型存在
实例属性初始化:
解释:
  • 声明成员 age,类型为 number(没有初始值)。
  • 声明成员 gender,并设置初始值,此时,可省略类型注解(TS 类型推论 为 string 类型)。
构造函数:
解释:
  • 成员初始化(比如,age: number)后,才可以通过 this.age 来访问实例成员。
  • 需要为构造函数指定类型注解,否则会被隐式推断为 any;构造函数不需要返回值类型。
实例方法:
解释:
  • 方法的类型注解(参数和返回值)与函数用法相同。

1.2 类继承

类继承的两种方式:
  • extends(继承父类)
  • implements(实现接口)
说明:
  • JS 中只有 extends,而 implements 是 TS 提供的。

① extends(继承父类)

解释:
  • 通过 extends 关键字实现继承
  • 子类 Dog 继承父类 Animal,则 Dog 的实例对象 dog 就同时具有了父类 Animal 和 子类 Dog 的所有属性和方法。

② implements(实现接口)

解释:
  • 通过 implements 关键字让 class 实现接口。
  • Person 类实现接口 Singable 意味着,Person 类中必须提供 Singable 接口中指定的所有方法和属性。

1.3 类成员可见性

类成员可见性:
  • 可以使用 TS 来控制 class 的方法或属性对于 class 外的代码是否可见
可见性修饰符包括:
  • public(公有的)
  • protected(受保护的)
  • private(私有的)。
①  public(公有的)
  • public:表示公有的、公开的,公有成员可以被任何地方访问,默认可见性。
解释:
  • 在类属性或方法前面添加 public 关键字,来修饰该属性或方法是共有的。
  • 因为 public 是默认可见性,所以,可以直接省略

② protected(受保护的)

  • protected:表示受保护的,仅对其声明所在类和子类中(非实例对象)可见。

解释:
  • 在类属性或方法前面添加 protected 关键字,来修饰该属性或方法是受保护的。
  • 在子类的方法内部可以通过 this 来访问父类中受保护的成员,但是,对实例不可见

③ private(私有的)

  • private:表示私有的只在当前类中可见,对实例对象以及子类也是不可见的。

解释:
  • 在类属性或方法前面添加 private 关键字,来修饰该属性或方法是私有的。
  • 私有的属性或方法只在当前类中可见,对子类和实例对象也都是不可见的!

1.4 类成员只读修饰符

除了可见性修饰符之外,还有一个常见修饰符就是: readonly(只读修饰符)
readonly
  • 表示只读用来防止在构造函数之外对属性进行赋值。
解释:
  • 使用 readonly 关键字修饰该属性是只读的,注意只能修饰属性不能修饰方法
  • 注意:属性 age 后面的类型注解(比如,此处的 number)如果不加,则 age 的类型为 18 (字面量类型)。
  • 接口或者 {} 表示的对象类型,也可以使用 readonly

2. 类型兼容性

2.1 类型兼容性

① 两种类型系统:
  • Structural Type System(结构化类型系统)
  • Nominal Type System(标明类型系统)。
TS 采用的是结构化类型系统 ,也叫做 duck typing(鸭子类型), 类型检查关注的是值所具有的形状
也就是说,在结构类型系统中,如果两个对象具有相同的形状,则认为它们属于同一类型。
解释:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值