首页 > 其他分享 >TypeScript 高级类型

TypeScript 高级类型

时间:2022-11-27 00:44:31浏览次数:45  
标签:TypeScript string type 高级 number let 类型 Type

TypeScript 高级类型

  1. class 类

  2. 类型兼容性

  3. 交叉类型

  4. 泛型 和 keyof

  5. 索引签名类型 和 索引查询类型

  6. 映射类型

class 类

class Person {
    age: number //不加类型 默认为 any 类型
    gender = '男'
}
const p = new Person()

属性初始化

p.age
p.gender
// new Person(18, '男')

class 构造函数

class Person1 {
    age: number
    gender: string
    constructor(age: number, gender: string) {
        this.age = age
        this.gender = gender
    } //构造函数 -- 构造函数不能写返回值类型
}
const p1 = new Person1(18, '男')
console.log(p.age, p.gender);

class 实例方法

class Point {
    x = 1
    y = 2
​
    scale(n: number) {
        this.x *= n
        this.y *= n
    }
}
const p2 = new Point()

class 继承 - extends | implements

class Animal {
    move() {
        console.log('move');
    }
}
class Dog extends Animal {
    name = 'name'
    break() {
        console.log('break');
​
    }
}
const dog = new Dog()
​
​
interface Single {
    sing(): void
}
class Person2 implements Single {
    // 接口中定义了什么,调用接口时就要实现这些定义
    sing(): void {
        console.log('sing');
    }
}

class 类常见的修饰符 - 可见性修饰符:public | protected | private ;只读修饰符:readonly

// 成员可见性 -- public | protected | private
class Animal1 {
    // public | protected | private move1() {}
}
​
// readyonly 只读修饰符,只能修饰属性不能修饰方法 -- 接口 or 对象也可用
class Person3 {
    // 只要是 readonly 修饰的属性,必须手动添加类型
    readonly age: number = 18
    constructor(age: number) {//只有 constructor 才能改变只读属性的值
        this.age = age
    }
}
​
// 接口中 使用 readonly
interface IPerson {
    readonly name: string
}
let obj: IPerson = {
    name: 'jack'
}
// obj.name = 'rose' 因为是只读属性,不能修改 name 属性的值
​
// 对象的方式
let obj1: { readonly name: string } = {
    name: 'jack'
}

类型兼容性

有两种类型系统:

  • 结构化类型系统 Structural Type System

    • TypeScript 采用结构化类型系统,也叫做ducktyping(鸭子类型),类型检查关注的是所具有的形状

class Point2 { x: number; y: number }
class Point2D { x: number; y: number }
const p4: Point2 = new Point2D()
  • 标明性类型系统 Nominal Type System

    • 例如 java \ c#,不同的类,类型无法兼容

对象之间的类型兼容性

// 对于对象类型来说,y成员至少与x相同,则x兼容y
class Point3D { x: number; y: number; z: number }
const p5: Point2 = new Point3D()

 

接口之间的类型兼容性

接口之间的兼容性,类似于 class,并且 class 和 interface 之间也可以兼容。

interface Point { x: number, y: number }
interface Point2D { x: number, y: number }
interface Point3D { x: number, y: number, z: number }
let p1: Point
let p2: Point2D
let p3: Point3D
​
p1 = p2    p2 = p1    p1 = p3 // 正确演示
p3 = p1 // 错误演示
​
// class类和接口之间也是可以兼容的
class Point 4D { x: number; y: number; z: number }
p2 = new Point4D()    

 

函数之间的类型兼容性

函数之间兼容性比较复杂,需要考虑

标签:TypeScript,string,type,高级,number,let,类型,Type
From: https://www.cnblogs.com/c0lmd0wn/p/16928795.html

相关文章

  • lightdb修改字段int类型为xid(报错)
    zjh@lt_test=#selectpg_set_next_xid(2941144647::xid);ERROR:cannotcasttypebiginttoxidLINE1:selectpg_set_next_xid(2941144647::xid);......
  • Redis学习(八)之redis中的数据类型之bitmaps类型
      1、集合的每个成员相当于整数的0-N。 2、每个bit就是一个权限,类似文件系统。这两句让我一脸懵。。。。其实就是用bit位来存储0和1,可以用来存储布尔型的数据,一个b......
  • Day23:instanceof 和类型转换
    多态中的转型转型当父类的不能调用子类方法时,我们可以将父类转换成子类,然后就可以调用子类的方法。转型分为两种:向上转型:父类引用指向子类对象;向下转型:父类引用转为子......
  • TypeScript之构造函数和this
     示例:classDog{name:string;age:number;//constructor被称为构造函数//构造函数会在对象创建时调用constructor(name:string,age:......
  • TypeScript之类
    TypeScript中的类的定义与使用示例//使用class关键字来定义一个类/**对象中主要包含了两个部分:*属性*方法**/classPerson{/**......
  • TypeScript/Javascript 泛型字典
    typescript是javaScript的超集,相当于把弱类型的js变成了强类型的语言,并且实现了封装(成员私有),更方便面向对象编程。然鹅,typescript并没有扩增原生JS的内容,比如:支持了import......
  • python基础:pycharm下载与使用、python语法之注释、PEP8规范、变量与常量、变量的基本
    目录pycharm下载与使用python语法之注释PEP8规范变量与常量变量的基本使用常量的基本使用数据类型数据类型之整型int数据类型之浮点型float数据类型之字符串str数据类型之......
  • django模型的字段类型简介
    【django基础】django模型的字段类型简介说实在的,每一个框架基本都会用一套orm,只是各有各的标准,每次用起来都挺费劲的,所以还是要单独整理下AutoField—自增列=int......
  • TypeScript学习笔记-05webpack打包
    1.使用命令npminit-y生成项目package.json,这个文件是项目的基本信息,方便我们对项目进行管理,如图所示。2.使用命令 npmi-Dwebpackwebpack-clitypescriptts-load......
  • [Typescript] 118. Hard - IsRequiredKey
    Implementageneric IsRequiredKey<T,K> thatreturnwhether K arerequiredkeysof T .ForexampletypeA=IsRequiredKey<{a:number,b?:string},'a'>......