成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

typescript中的class和interface

開發
剛剛的vue3.0一發布,各大網址和社區以及公眾號已經被Vue3.0的One Piece版本所霸屏,出現不同的標題有著同樣內容的現象,借此熱度我們不如好好回顧一下ts基礎知識,備戰vue3.0的正式使用。

[[343370]]

 typescript這個東西說實在的,真的是容易忘記,一段時間不用就感覺特別陌生,但是回過頭來看看,又有一種熟悉的感覺,有句話這么說的ts越用越香,它確實能夠規范我們的書寫的格式,語法校驗和類型校驗等。之前寫過react+ts的一個demo,但是時間久了就忘記了,現在也是趁著熱度再回顧一下ts的內容,以及一些高階語法,現在我們回顧一下ts中常見的類和接口,如果喜歡的可以點贊,評論,關注公眾號讓更多的人看到。如果有問題也可以評論留言,我們一起相互學習,一起進步。

class
首頁我們要清楚的一點是typescript中類和javascript中ES6語法類的區別,千萬不要混淆。ts中相比于js添加了聲明屬性的類型和參數的類型以及返回結果類型。這個地方一看就會一寫就不對,如果不聲明ts會報錯。

  1. class Person{ 
  2.     name:string; 
  3.     constructor(name:string){ 
  4.         this.name = name
  5.     } 
  6.     getName():void{ 
  7.         console.log(this.name); 
  8.     } 

  1. class Person{ 
  2.     constructor(name){ 
  3.         this.name = name
  4.     } 
  5.     getName(){ 
  6.         console.log(this.name); 
  7.     } 

ES5編輯后的結果

  1. var Person = /** @class */ (function () { 
  2.     function Person(name) { 
  3.         this.name = name
  4.     } 
  5.     Person.prototype.getName = function () { 
  6.         console.log(this.name); 
  7.     }; 
  8.     return Person; 
  9. }()); 

類的get和set
ts在編譯get和set的時候默認是es3編譯,vscode編輯器會報錯error TS1056: Accessors are only available when targeting ECMAScript 5 and higher需要編譯到版本ES5或以上,解決辦法:$ tsc xxx.ts -t es5。

  1. class User
  2.     myname:string; 
  3.     constructor(myname:string){ 
  4.         this.myname = myname 
  5.     } 
  6.     get name(){ 
  7.         return this.myname 
  8.     } 
  9.     set name(newName:string){ 
  10.         this.myname = newName 
  11.     } 

ES5編譯后的結果

  1. var User = /** @class */ (function () { 
  2.     function User(myname) { 
  3.         this.myname = myname; 
  4.     } 
  5.     Object.defineProperty(User.prototype, "name", { 
  6.         get: function () { 
  7.             return this.myname; 
  8.         }, 
  9.         setfunction (newName) { 
  10.             this.myname = newName; 
  11.         }, 
  12.         enumerable: false
  13.         configurable: true 
  14.     }); 
  15.     return User
  16. }()); 

這里有幾個思考問題,答案見文末:

  1. var u = new User("a"); 
  2. console.log(u); 
  3. console.log(u.myname); 
  4. u.myname = 'b'
  5. console.log(u.myname); 
  6. console.log(u.hasOwnProperty("name")); 
  7. console.log(Object.getPrototypeOf(u)); 
  8. console.log(Object.getPrototypeOf(u).hasOwnProperty("name")); 

抽象類
abstract關鍵字表示抽象類,抽象類是不能被實例化即new,只能被繼承,抽象類一般是用來封裝一些公共的,提供給子類使用的方法和屬性的

  1. abstract class Animal{ 
  2.     public readonly name:string; 
  3.     protected age:number = 38; 
  4.     private money:number = 10; 
  5.     constructor(name:string){ 
  6.         this.name = name 
  7.     } 
  8. class Dog extends Animal{ 
  9.     static className = 'Dog' 
  10.     static getClassName(){ 
  11.         console.log(this.className) 
  12.     } 
  13.     getName(){ 
  14.         console.log(this.name
  15.     } 
  16.     getAge(){ 
  17.         console.log(this.age) 
  18.     } 
  19. let a = new Animal("ss"); 

這里打印看一下繼承的結果:

  1. console.log(a); //Dog { age: 38, money: 10, name'ss' } 

這里順便說一下訪問修飾符 public protected private

public 里里外外都能訪問,包括自己、自己的子類、其他類都能
protected 自己和子類能訪問但是其他地方不能訪問
private 私有的(只有自己能訪問,子類的其他都不能訪問)

接口表示對象的屬性

  1. interface Rectangle { 
  2.     width: number; 
  3.     height: number 
  4.  
  5. let r: Rectangle = { 
  6.     width: 100, height: 10 
  7.  
  8. interface Speakable { 
  9.     speak(): void; 
  10.     name?: string 
  11.  
  12. let speaker: Speakable = { 
  13.     //name:"bdt"
  14.     speak() { } 

接口用來描述抽象的行為

  1. interface AnimalLink { 
  2.     eat(): void; 
  3.     move(): void 

接口可以實現繼承

  1. interface PersonLike extends AnimalLink { 
  2.     speak(): void 
  3. class Person2 implements PersonLike { 
  4.     speak() { }; 
  5.     eat() { }; 
  6.     move() { } 

通過接口約束變量類型

  1. interface Person3 { 
  2.     readonly id: number; 
  3.     name: string; 
  4.     [PropName: string]: any 
  5. let p1: Person3 = { 
  6.     id: 1, 
  7.     name"sss" 

通過接口約束(規范)函數

  1. interface DiscountInterface{ 
  2.     (price:number):number 
  3. let discount:DiscountInterface = function (price: number): number { 
  4.     return price * .8 

通過索引約束數組和對象

  1. interface UserInterface{ 
  2.     [index:number]:string 
  3.  
  4. let arr:UserInterface = ['aa','bb'
  5.  
  6. interface UserInterface2{ 
  7.     [index:string]:string 
  8. let obj:UserInterface2  = {name:"sss"

通過接口約束構造函數

  1. class Animal3{ 
  2.     constructor(public name:string){} 
  3. interface WithClassName{ 
  4.     new (name:string):Animal3 
  5. function createClass(clazz:WithClassName,name:string){ 
  6.     return new clazz(name
  7. let a3 = createClass(Animal3,"別抖腿"); 
  8. console.log(a3) 

class和interface的區別
class 類聲明并實現方法
interface 接口聲明,但是不能實現方法

  1. abstract class Animal{ 
  2.     name:string="111"
  3.     abstract speak():void;  //抽象類和方法不包含具體實現  必須在子類中實現 
  4. //接口里的方法都是抽象的 
  5. interface Flying{ 
  6.     fly():void 
  7. interface Eating{ 
  8.     eat():void 
  9. class Dog extends Animal{ 
  10.     speak(){ 
  11.         console.log("汪汪汪")   //重寫:子類重寫繼承自父類中的方法 
  12.     } 
  13. class Cat extends Animal implements Flying,Eating{ 
  14.     speak(){   //繼承抽象類的方法必須實現 
  15.         console.log("喵喵喵"
  16.     } 
  17.     fly(){ 
  18.         console.log("我是一只飛貨"
  19.     } 
  20.     eat(){ 
  21.         console.log("我是一只吃貨"
  22.     } 

寫在最后
文中答案

  1. User { myname: 'a' } 
  2. false 
  3. User { name: [Getter/Setter] } 
  4. true 

 

 

責任編輯:姜華 來源: 小丑的小屋
相關推薦

2009-08-27 15:48:40

interfaceabstract cl

2009-08-27 16:22:58

interfaceabstract cl

2022-09-02 09:02:44

TypeInterface

2022-05-06 09:21:21

TypeScriptinterfacetype

2021-06-23 08:01:18

TypeScript interface type

2021-08-05 08:32:45

TypeScript InterfaceType

2022-11-30 07:17:53

2021-08-04 08:33:59

TypeScriptConst Readonly

2021-07-27 06:06:34

TypeScript語言運算符

2011-07-06 15:14:34

iOS Xcode

2023-12-07 11:47:00

TypeScript特殊值

2023-03-30 07:52:03

Golang接口

2024-05-11 10:19:31

TypeScript類型接口

2022-04-11 08:42:09

TypeScript子類型定義

2022-08-08 09:00:42

TypeScript映射類型

2012-12-24 13:30:34

iOS

2021-08-02 07:57:03

SynchronizeJava語言

2021-08-24 10:25:19

thisclassJava

2010-09-14 15:24:49

CSSIDClass

2023-04-14 15:44:20

TypeScrip函數重載
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久精品 | 日日操操 | 青青草原综合久久大伊人精品 | 国产精品色 | 亚洲欧洲日韩 | 精品一区二区久久久久久久网精 | 在线不卡| 韩日一区二区 | 欧美日韩在线观看视频网站 | 天天操网| 视频1区2区| 国产一区91在线 | 国产精品免费一区二区 | 国产成人精品一区二区三 | 亚洲三区视频 | 一区二区三区日韩 | 午夜影院在线观看免费 | 成人精品一区二区户外勾搭野战 | 国产精品久久久久久妇女6080 | 国产黑丝av | 中文字幕 在线观看 | 精品一区二区电影 | 求个av网址 | 午夜精品一区二区三区在线观看 | 欧一区 | 久久久国产一区 | 久久久精品 | 国产一区二区三区四区 | 国产高清在线精品一区二区三区 | 中文字幕一区二区三区在线乱码 | 中文字幕av在线 | 超碰在线人| 日韩精品视频一区二区三区 | 国产精品成人一区二区三区夜夜夜 | 久久y | 国产一区二区三区在线免费观看 | 香蕉视频91 | 中文字幕一区二区三区乱码在线 | 国产午夜精品久久 | 国产一区二区三区久久久久久久久 | 北条麻妃国产九九九精品小说 |