日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
typescript中的class和interface

 typescript這個(gè)東西說(shuō)實(shí)在的,真的是容易忘記,一段時(shí)間不用就感覺(jué)特別陌生,但是回過(guò)頭來(lái)看看,又有一種熟悉的感覺(jué),有句話這么說(shuō)的ts越用越香,它確實(shí)能夠規(guī)范我們的書寫的格式,語(yǔ)法校驗(yàn)和類型校驗(yàn)等。之前寫過(guò)react+ts的一個(gè)demo,但是時(shí)間久了就忘記了,現(xiàn)在也是趁著熱度再回顧一下ts的內(nèi)容,以及一些高階語(yǔ)法,現(xiàn)在我們回顧一下ts中常見(jiàn)的類和接口,如果喜歡的可以點(diǎn)贊,評(píng)論,關(guān)注公眾號(hào)讓更多的人看到。如果有問(wèn)題也可以評(píng)論留言,我們一起相互學(xué)習(xí),一起進(jìn)步。

泊頭網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站開(kāi)發(fā)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司公司2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司

class
首頁(yè)我們要清楚的一點(diǎn)是typescript中類和javascript中ES6語(yǔ)法類的區(qū)別,千萬(wàn)不要混淆。ts中相比于js添加了聲明屬性的類型和參數(shù)的類型以及返回結(jié)果類型。這個(gè)地方一看就會(huì)一寫就不對(duì),如果不聲明ts會(huì)報(bào)錯(cuò)。

 
 
 
 
  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編輯后的結(jié)果

 
 
 
 
  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的時(shí)候默認(rèn)是es3編譯,vscode編輯器會(huì)報(bào)錯(cuò)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編譯后的結(jié)果

 
 
 
 
  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.         set: function (newName) { 
  10.             this.myname = newName; 
  11.         }, 
  12.         enumerable: false, 
  13.         configurable: true 
  14.     }); 
  15.     return User; 
  16. }()); 

這里有幾個(gè)思考問(wèn)題,答案見(jiàn)文末:

 
 
 
 
  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關(guān)鍵字表示抽象類,抽象類是不能被實(shí)例化即new,只能被繼承,抽象類一般是用來(lái)封裝一些公共的,提供給子類使用的方法和屬性的

 
 
 
 
  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"); 

這里打印看一下繼承的結(jié)果:

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

這里順便說(shuō)一下訪問(wèn)修飾符 public protected private

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

接口表示對(duì)象的屬性

 
 
 
 
  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() { } 

接口用來(lái)描述抽象的行為

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

接口可以實(shí)現(xiàn)繼承

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

通過(guò)接口約束變量類型

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

通過(guò)接口約束(規(guī)范)函數(shù)

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

通過(guò)索引約束數(shù)組和對(duì)象

 
 
 
 
  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"} 

通過(guò)接口約束構(gòu)造函數(shù)

 
 
 
 
  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的區(qū)別
class 類聲明并實(shí)現(xiàn)方法
interface 接口聲明,但是不能實(shí)現(xiàn)方法

 
 
 
 
  1. abstract class Animal{ 
  2.     name:string="111"; 
  3.     abstract speak():void;  //抽象類和方法不包含具體實(shí)現(xiàn)  必須在子類中實(shí)現(xiàn) 
  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(){   //繼承抽象類的方法必須實(shí)現(xiàn) 
  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 

網(wǎng)站欄目:typescript中的class和interface
本文地址:http://m.5511xx.com/article/dheiiid.html