公司动态

TypeScript总结:16、面向对象速查

📅 2026/8/15 10:01:53
TypeScript总结:16、面向对象速查
面向对象速查TypeScript 面向对象部分可以归纳为四个关键词类、封装、继承和抽象。接口与泛型则进一步帮助我们描述结构和复用类型逻辑。一、类的基本模板classPerson{name:string;age:number;constructor(name:string,age:number){this.namename;this.ageage;}sayHello():void{console.log(大家好我是this.name);}}constpersonnewPerson(孙悟空,18);person.sayHello();成员作用属性保存对象数据构造函数创建实例时初始化数据方法描述对象行为this表示当前实例new创建类的实例二、访问修饰符修饰符当前类子类类外部public可以访问可以访问可以访问protected可以访问可以访问不可以访问private可以访问不可以访问不可以访问示例classUser{publicname:string;protectedrole:string;privatepassword:string;constructor(name:string,role:string,password:string){this.namename;this.rolerole;this.passwordpassword;}}建议默认公开的成员才使用public。只允许子类使用的成员使用protected。内部实现细节使用private。三、readonly、getter 和 setterreadonlyclassUser{readonlyid:number;constructor(id:number){this.idid;}}readonly属性初始化后不能重新赋值。getter 和 setterclassPerson{private_name:string;constructor(name:string){this._namename;}getname():string{returnthis._name;}setname(value:string){if(value.trim()){this._namevalue;}}}记忆方式get读取属性。set修改属性。四、静态成员classMathTools{staticPI3.1415926;staticsum(a:number,b:number):number{returnab;}}console.log(MathTools.PI);console.log(MathTools.sum(1,2));静态成员属于类本身通过类名访问不需要创建实例。五、继承和方法重写classAnimal{constructor(publicname:string){}run():void{console.log(this.name正在跑);}}classDogextendsAnimal{bark():void{console.log(this.name在汪汪叫);}overriderun():void{console.log(狗正在跑);}}constdognewDog(旺财);dog.run();dog.bark();关键语法语法作用extends继承父类super(...)调用父类构造函数super.method()调用父类方法override明确表示重写父类成员六、抽象类abstractclassAnimal{abstractrun():void;bark():void{console.log(动物在叫);}}classDogextendsAnimal{run():void{console.log(狗在跑);}}抽象类的特点不能直接实例化。可以包含普通属性和普通方法。可以包含抽象方法。子类必须实现抽象方法。七、接口描述对象结构interfacePerson{name:string;sayHello():void;}functiongreet(person:Person):void{person.sayHello();}类实现接口classStudentimplementsPerson{constructor(publicname:string){}sayHello():void{console.log(我是this.name);}}implements只负责检查结构不会自动生成接口中的属性和方法。八、泛型泛型函数functionidentityT(value:T):T{returnvalue;}identity(100);identity(hello);泛型类classBoxT{constructor(publicvalue:T){}}constnumberBoxnewBox(100);conststringBoxnewBox(hello);泛型约束interfaceHasLength{length:number;}functiongetLengthTextendsHasLength(value:T):number{returnvalue.length;}九、接口、抽象类和普通类的区别类型主要作用能否包含具体实现能否直接实例化接口描述结构和契约不能不能抽象类提供通用模型和部分实现可以不能普通类创建具体对象可以可以十、面向对象设计建议类负责描述对象状态和行为。不要把所有属性都公开优先保护内部状态。父类放公共逻辑子类放具体差异。只需要约束结构时优先考虑接口。需要共享实现时再考虑抽象类或继承。重复的类型逻辑优先使用泛型。十一、本章小结类解决对象创建和行为组织问题。封装解决属性访问和数据保护问题。继承解决公共逻辑复用问题。抽象类解决通用模型和强制实现问题。接口解决结构约束问题。泛型解决类型安全的代码复用问题。