typescript:鴨子類型、屬性靜態訪問、屬性動態訪問、

//class 類
class MyClass {
    //屬性
    [index: string]: any;

    //構造函數
    //和java一樣,默認自帶無參數的構造函數
    constructor() {
    }


    //一些方法
}

var myClass_1: MyClass = new MyClass();
myClass_1.keys = "123";//以靜態方式添加屬性
myClass_1["key2"] = "123";//以動態方式添加屬性
myClass_1.sayHi = function (): string { return "hahaha" };
console.log(myClass_1)
//由於該方法是動態添加的,編輯器無法給方法提示,該對象只在運行期才擁有sayHi()方法
console.log(myClass_1.sayHi())



// obj?.prop       // 自判斷靜態屬性訪問
// obj?.[expr]     // 自判斷動態訪問
// func?.(...args) // 自判斷函數或方法調用


//鴨子類型(Duck Typing)
//本質上就是java中的,利用接口實現多態
//ts裏的接口有目前來看有兩種作用:
//1、像java中一樣,當作一個接口,讓類來實現,從而實現多態
//2、使用鴨子類型,當作一種“模板”,模板內可以包含number、string、function等等,甚至可以
//[keyName:string]:any 這樣給實現了 “模板”的對象 動態地增加屬性

export interface IPoint { 
    x:number 
    y:number 
} 
export function addPoints(p1:IPoint,p2:IPoint):IPoint { 
    var x = p1.x + p2.x 
    var y = p1.y + p2.y 
    return {x:x,y:y} 
} 
 
// 正確
export var newPoint = addPoints({x:3,y:4},{x:5,y:1})  
 
// 錯誤 
//export var newPoint2 = addPoints({x:1},{x:4,y:3})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章