classAnimal{
name:string;constructor(name){this.name = name
}eat(){return"吃肉"}}classDogextendsAnimal{constructor(name){super(name)}say(){returnthis.name +" "+this.eat()}}let dog =newDog("aaa")
dog.say()
修饰符
public 可以在任何地方被访问到,默认就是公共的
protected 自己和子类可以访问
private 任何人都不能访问(包括子类),只能在自己内部用
classAnimal{// 类的名字为 Animal
name:string;constructor(name){// 属性this.name = name;}eat(){return"吃肉";}}classDogextendsAnimal{constructor(name){super(name);// 传到父类里}say(){returnthis.name +" "+this.eat();}}let dog =newDog("aaa");// 实例化
dog.say();// 直接通过(类名)来调用classAnimal2{staticeat(){return"吃肉";}static Name:string="123";}// 原本要通过 let AnimalE = new Animal2() AnimalE.eat()才可以
Animal2.eat();// 静态方法
Animal2.Name;classA3{publicstatic Name ="123";privatestaticeat(){return"吃肉";}}A3.Name;// 123// A3.eat() // 报错classYy{protectedYeat(){return"吃肉";}eat2(){return"吃鱼";}}classLwhextendsYy{constructor(){super();}fun(){returnthis.Yeat();//子类的内部是可以访问的}}let yy =newYy();let lwh =newLwh();//lwh.Yeat() 这样访问会报错
lwh.fun();
泛型!!!
枚举是指在定义函数、接口或类时候,不先指定具体的类型,而在使用时再指定它的类型
T表示泛型变量 表示任何类型
这样也可以,不一定要用 T <这里里面的值表示任何类型>
functionhello<T>(name:T):T{//函数、参数、返回的结果都不确定是什么类型// hello 函数是泛型return name
}hello("6666")//类型推断,编译器会根据传入的参数来自动的判断T的类型(也就是传的是什么,就是什么类型)// hello<string>("6666") //指定类型1.泛型的约束 extendsinterface Length{
length:number}functionhello2<Sextends Length>(name:S){//约束你传的参数内部属性必须有 length 属性}hello2("123")hello2([123])2.指定泛型()functionyy<T>(name,age:T){console.log(name);console.log(age);}yy<number>("张三",55)// age 被值定位 number 类型了// 因为 age 加了泛型 , yy<number>()指定是数值类型3.泛型在类中运用()classA3<T>{
n:Tconstructor(num:T){this.n = num
}add(x:T):T{return x
}}let a3 =newA3<number>(1)