TS 学习第二天

//class  也是一种类型
class Person{
    age:number;//实例属性
    gender:string;//类型推论使得gender类型为string,默认值是' 男'
   
    //构造函数  不需要返回值,可通过this访问成员
    constructor(age:number,gender:string){
        this.age = age;
        this.gender = gender;
    }
}
const p = new Person(18,'男')//实例化,分配内存
console.log(p)

//子类继承父类   
class Animal{
    name:string
    run(){
        console.log("跑.")
    }
    walk(){
        console.log("走.")
    }
}

class Dog extends Animal{
    bark(){
        console.log("旺旺.")
    }
}

const dog = new Dog()
dog.run()//继承父类的方法
dog.walk()//继承父类的方法
dog.bark()
//类的接口实现
interface Singable{
    player:string//演唱曲目
    sing():void
}

class Bird implements Singable{
    player: string;
    sing(): void {
        console.log("鸟鸣.",this.player)
    }
}

let bird = new Bird()
bird.player = "baba"
bird.sing()

//类的访问限制  public protected private
//readonly 只读属性,只能在构造函数使用  只可以修饰属性 不可修饰方法  不仅仅可以用在类中,接口也可以用,对象也可以用
class Tree{
    name:string //默认 public,子类和父类都可以调用
    protected age:number //protected,子类和父类内部可以调用 
    private name2:'野生树'
    readonly color:string = '红色'//当只读类型没有指定类型但是有默认值的时候,类型是字面量类型
    walk(){
        //private 仅供当前类的内部可以使用
        console.log(this.color,this.name2," 走。")
    }
    constructor(color:string){
        this.color = color
    }
}

class Pine extends Tree{
    private name3:'松树'
    info(){
        console.log(this.name,"+",this.age)//public protected 子类的内部可以使用
    }
    run(){//private 当前类的内部可以使用
        console.log(this.color,this.name3,"松树 跑。")
    }
}

const tree1 = new Tree('黑')
const tree2 = new Pine('red')


//public 子类的外部可以使用,protected 子类的外部不可以使用
tree1.name
tree2.name
tree1.walk()
tree2.run()


//类型兼容性
/*
两种类型系统:结构化类型系统 标明类型系统
ts采用结构化类型系统,类型检查观察关注参数形状
 */

class Point{x:number;y:number}
class Point2D{x:number;y:number}
class Point3D{x:number;y:number;z:number}
interface IPoint2D{x:number;y:number}
interface IPoint3D{x:number;y:number;z:number}
const p1 :Point = new Point2D();  
//没有报错,因为Point 和Point2D 属性个数和属性类型相同,标明类型系统会报错
const p2 :Point = new Point3D();  //参数少的兼容参数多的
//没有报错,因为Point 和Point3D 前两个属性个数和属性类型相同,标明类型系统会报错
const p3 :IPoint3D = new Point3D();  //接口和类兼容
//没有报错,因为IPoint3D 和Point3D 属性个数和属性类型相同,标明类型系统会报错



//函数兼容  相同位置的参数类型要相同(指基础类型)或兼容(对象类型)
type F1 = (a:number)=>void
type F2 = (a:number,b:number)=>void
let f1:F1;
let f2:F2;
// f2 = f1;//函数参数少的可以兼容函数参数多的  因为js中函数多的可以忽略
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值