阅读 121

TypeScript 入门 06 - 类(Class)类型

06 - 类(Class)类型

公共、私有与受保护的修饰符
  • public: 修饰的是在任何地方可见、公有的属性或方法

  • private: 修饰的是仅在同一类中可见、私有的属性或方法

  • protected: 修饰的是仅在类自身及子类中可见、受保护的属性或方法

注意:TS中定义类的私有属性仅仅代表静态类型检测层面的私有。

如果我们强制忽略TS类型的检查错误,转译且运行 JS 时依旧可以获取到 lastName 属性。

这是因为 JS 并不支持真正意义上的私有属性。

只读修饰符
  • 如果我们不希望类的属性被更改,则可以使用 readonly 只读修饰符声明类的属性

    class Son {
    	public readonly firstName: string
    	// ...
    }复制代码
存取器 setter / getter
  • 通过对类属性访问的截取, 我们可以实现一些特定的访问控制逻辑

    class Son {
    	// ...
    	get myLastName () {
    		return this.lastName
    	}
    	set myLastName (name: string) {
    		if (this.firstName === 'Tony') {
    			this.lastName = name
    		} else {
    			console.error('Unable to change myLastName')
    		}
    	}
    }复制代码
静态属性
  • 可以直接通过类访问静态属性

    class God {
    	static dnName = 'Jesus'
    }
    console.log(God.dnName)	// 'Jesus'复制代码

注意: 不依赖实例this上下文的方法就可以定义成静态方法。

这意味这需要显式注解 this 类型才可以在静态方法中使用 this, 非静态方法则不需要显式注解 this 类型,因为 this 的指向默认是类的实例。

抽象类
  • 可以使用抽象类定义派生类需要实现的属性和方法,同时可以定义其他被继承的默认属性和方法。

  • 抽象类不能被实例化

    abstract class Adder {
    	abstract x: number
    	abstract y: number
    	abstract add(): number
    }
    class NumAdder extends Adder {
    	x: number
    	y: number
    	constructor (x: number, y: number) {
    		super();
    		this.x = x
    		this.y = y
    	}
    	add (): number {
    		return this.x + this.y
    	}
    }复制代码
  • 接口 interface 与 抽象类相比,接口只能定义类成员的类型

    interface IA {
    	x: number;
    	y: number;
    	add: () => number;
    }
    class NumAdder implements IA {
    	x: number
    	y: number
    	constructor (x: number, y: number) {
    		super();
    		this.x = x
    		this.y = y
    	}
    }复制代码
类的类型
  • 在定义类的时候,我们声明的除构造函数外所有属性、方法的类型,就是这个特殊类型的成员。

  • 声明类的同时,也声明了一个类型,就是这个类名

    class A {
    	name: string
    	constructor (name: string) {
    		this.name = name
    	}
    }
    const a: A = { name: 'a'}


作者:崔华乐
链接:https://juejin.cn/post/7025904404842676255


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐