類的出現可讓前端程序員抽象層次、增長維護性和複用性。固然這一系列的類的操做,咱們都叫他面向對象編程。TypeScript就是一個基於類的面向對象編程語言。javascript
類是對象具體事務的一個抽象,對象是類的具體表現。html
// 類規範,首寫字母大寫 - 大駝峯命名 class XiaoJieJie{ // 區別於對象,不須要使用逗號隔開 name: string age: number // 構造函數 // 構造函數的主要做用是給類中封裝的屬性進行賦值 constructor(name:string, age:number){ // 使用 this 賦值 this.name = name this.age = age } say(){ console.log('NIHAOA!') } } // 有類以後聲明對象 let jiejie:XiaoJieJie = new XiaoJieJie('fanbingbing',18) // 打印出生成的對象看下樣子 console.log(jiejie) // 調用類方法 jiejie.say()
使用和定義類其實很簡單,關鍵是理解類的思想。要有抽象邏輯的能力,這樣才能複用和加強維護性。前端
class XiaoJieJie{ public sex:string protected name:string private age:number public constructor(sex:string, name:string, age:number){ this.sex = sex this.name = name this.age = age } public sayHello(){ console.log('HELLO') } protected sayLove(){ console.log('ILOVEYOU') } } var jiejie:XiaoJieJie = new XiaoJieJie('nv', 'DLLB', 16) // 打印出對象屬性看效果 console.log(jiejie.sex) // 報錯:屬性「name」受保護,只能在類「XiaoJieJie」及其子類中訪問 console.log(jiejie.name) // 報錯:屬性「age」爲私有屬性,只能在類「XiaoJieJie」中訪問 console.log(jiejie.age) // 調用方法 jiejie.sayHello() // 報錯:屬性「age」爲私有屬性,只能在類「XiaoJieJie」中訪問 jiejie.sayLove()
使用readonly修飾符將屬性設置爲只讀,只讀屬性必須在生命時或者構造函數裏被初始化(注意)。java
class Man{ public readonly sex:string = 'nan' } var man:Man = new Man() // 報錯:沒法分配到「sex」,由於它是常數或只讀屬性 man.sex = 'nv'
繼承:容許咱們建立一個類(子類),從已有的類(父類)上繼承全部的屬性和方法,子類能夠新建父類中沒有的屬性和方法。程序員
// 父類 class Nloong{ public name:string public age:number public skill:string constructor(name:string, age:number, skill:string){ this.name = name this.age = age this.skill = skill } public interest(){ console.log('zhaonimei') } } let loongObj:Nloong = new Nloong('baiye', 18, 'coding') // 測試父類方法 loongObj.interest() // 子類繼承父類屬性和方法 extends // 可是有一點須要咱們注意,TypeScript不支持多重繼承。 class Xloong extends Nloong{ // 子類擴展自身的屬性和方法 public xingxiang:string = 'shuaiqi' public zhuangQian(){ console.log('yitianyigeyi') } } let shuai = new Xloong('shuai', 5, 'daren') // 子類能使用父類的方法,經過繼承而來 shuai.interest() // 子類能使用父類找中沒有自身擴展的方法 shuai.zhuangQian()
// 父類 class Nloong{ public name:string public age:number public skill:string constructor(name:string, age:number, skill:string){ this.name = name this.age = age this.skill = skill } public interest(){ console.log('zhaonimei') } } let loongObj:Nloong = new Nloong('baiye', 18, 'coding') loongObj.interest() // 子類 class Xloong extends Nloong{ public xingxiang:string = 'shuaiqi' // 重寫 public interest(){ // super 在子類中調用父類的方法,實現重寫時保存父類的方法 super.interest() console.log('chuangjianGS') } public zhuangQian(){ console.log('yitianyigeyi') } } let shuai = new Xloong('shuai', 5, 'daren') shuai.interest() shuai.zhuangQian()
// 接口 interface Husband{ sex:string interset:string // 接口可選參數添加問號 maiBaoBao?:Boolean } let myhusband:Husband = {sex: 'nan', interset: 'kanshu'} console.log(myhusband)
Dehua 是同名類,可使用不一樣的命名空間區分使用typescript
// 命名空間 namespace shuaiGe{ // export 暴露出去 export class Dehua{ public name:string = 'liudehua' talk(){ console.log('woshishuaigeliudehua') } } } namespace bdjie{ export class Dehua{ public name:string = 'madehua' talk(){ console.log('woshiershixiongmadehua') } } } let dehua1:shuaiGe.Dehua = new shuaiGe.Dehua() let dehua2:bdjie.Dehua = new bdjie.Dehua() dehua1.talk() dehua2.talk()
原文地址:http://jspang.com/post/typescript.html?tdsourcetag=s_pcqq_aiomsg編程