TS初学笔记(二)

定义类

class 类名{
  	//定义实例属性,必须实例化才会有的属性
	属性名:类型=值
  	//加 static 定义静态属性,无需实例化就有的属性
  	static 属性名:类型=值
  	// readonly 只读的属性,无法修改
  	static readonly 属性名:类型=值
  	//定义方法,直接写就是实例方法,必须实例才可以调用
  	方法名(){
    	...
    }
   	//前边加static 定义的方法是静态方法,无需实例化就可以使用
   	static 方法名(){
    	...
    }
}

构造函数和this

class Dog{
  //构造函数会在对象创建时调用
  constructor(参数:类型){
  	this.name=参数
  }
}

继承

//继承 extends 父类
class Father{
  	sayHi(){
    }
}
//使用继承后,子类将会拥有父类所有的属性和方法
//通过继承可以将多个类***有的代码写在一个父类中,能供简化代码,提高复用性
//如果在子类中,添加了和父类相同的方法,则子类的方***覆盖父类的方法(方法重写)
class Son extends Father{
	sayHi(){
    }
}
  

super关键字

class Son extends Father{
	age:number
  	constructor(name:string,age:number){
    	//如果在子类中写了构造函数,在子类构造函数中必须对父类构造函数继承
      	super(name)
      this.age=age
    }
  	sayHi(){
    //在类的方法中super就表示当前类的父类
      	super.sayHi()
    }
}

抽象类

//以abstract开头的类是抽象类,抽象类和其他类区别不大,只是不能用来创建对象,是专门用来被继承的类
abstract class Father{
	name:string
  constructor(name:string){
  	this.name=name
  }
  //定义抽象方法使用abstract开头,没有方法体,抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写
  abstract sayHi():void 
}

接口

//接口用来定义一个类结构,用来定义一个类中应该包含哪些属性和方法
//接口也可以当成类型声明来使用
interface myInterface{
	name:string
  	age:number
}
//定义两个重名的接口,可以合并为一个使用
interface myInterface{
	gender:string
}
const obj:myInterface{
	name:'刘成'
  	age:12
  	gender:'男'
}
//接口可以在定义类的时候去限制类的结构
//接口只定义对象的结构而不考虑实际值,在接口中所有的方法都是抽象方法
interface myInter{
	name:string
  	sayHello():void;
}
//定义类时,可以使类去实现一个接口,实现接口就是使类满足接口的要求
class MyClass implements myInter{
	name:string
  	sayHello(){
    	console.log('Hello!)
    }
}

属性的封装

class Person{
	//设置私有属性,外部不能访问和修改
  	private _age:number
  	constructor(age:number){
    	this._age=age
    }
  //定义方法,用来获取age属性
  	getAge(){
    	return this._age
    }
  //定义方法,用来修改age属性
  	steAge(value:number){
    	this._age=value
    }
  //getter方法用来读取属性,setter方法用来设置属性,他们被称为属性的存取器
  //TS中设置getter方法的方式
  get age(){
  	return this._age
  }
  //TS中设置setter方法的方式
  set age(value:number){
  	this._age=value
  }
}
class C{
	//可以直接将属性定义在构造函数中
  	constructor(public name:string,public age:number){
    }
}

泛型

//在定义函数或者类的时候,如果遇到类型不明确就可以使用泛型
function fn<T>(a:T):T{
	return a
}
//可以直接调用具有泛型的函数
let result = fn(a:10)//不指定泛型,TS可以自动对类型进行判断
let result2 = fn<string>(a:'hello')//指定泛型
interface Inter{
	length:number
}
//T extends Inter 表示泛型T必须是Inter实现类(子类)
function fn2<T extends Inter>(a:T):number{
	return a.length
}
fn2(a:{length:10})
//泛型也可以在类中使用
class MyClass<T>{
	name:T
  	constructor(name:T){
    	this.name=name
    }
}
const mc=new MyClass<string>(name:'刘成')
全部评论

相关推荐

其实本来打算等lastday的时候再写的,但是现在提笔写下这篇总结完全是出于自己的想法,今天上午自己被学校发的签到吵醒时才突然想明白了很多事情,遂决定写下本文进行总结,虽然现在顶多算2.5个月,但也大差不差喵。回看这段时间的日常实习,我的关键词是:遗憾,焦虑。当然也有快乐的时候,不过大部分时间都是前面这两种情绪主导。为了避免后人再次踩坑,我将在本文详细解释我遇到的困难&nbsp;+&nbsp;产生的原因&nbsp;+&nbsp;应对的措施。同时总结新人实习时除了业务本身,还有如何处理生活与工作上的平衡,调控自身的情绪,让自己恢复到最好的工作状态。本文不会教你实习怎么去做产出,因为有产出的前提是你的心态足够健康,且在工作之余还有时间去...
wuwuwuoow:你的经历跟挺像,但我实力远没你强,现在只能干外包。但解决焦虑这块我应该比你更有经验,因为我曾经也非常迷茫和焦虑: 1.规律作息。无论节假日,都必须在同一时间点睡觉,同一时间点起床。放假睡的多,工作睡的少,这就是典型的作息不规律。将直接干扰前额叶皮层功能,导致情绪波动(易怒、焦虑)。无论上班还是周末,我都是 11:30 睡,7 点起床。7.5h 睡眠,完全足够了。 2.运动。缓解压力,强身健体,提高免疫力。不要觉得每天没有时间锻炼,都是懒惰的借口。 3.冥想。长期练习会增厚前额叶皮层(理性决策区),缩小杏仁核体积(减少情绪过敏反应,核心),增强情绪调控能力。 方法很简单,任何时候都能做。就是闭上眼睛,只专注自己的呼吸,不去想其他任何事情。你可以尝试一下,你会发现非常难只专注呼吸,会有大量的想法涌现出来(什么走马灯),不要去压抑它们,而是放平心态,把注意力继续放在呼吸上面。 而且最重要的是,冥想让你学会“活在当下”。因为处于冥想的你,除了专注呼吸你还能做什么呢?你什么都做不了。生活也是这样,我们无法改变过去,无法预知未来会发生什么,我们能做的只有手头的事情,除此之外什么都别想,因为你无法去改变它们。 4.工作与生活分离。工作不是生活的全部,生活可不是只有工作。像我放假的时候,从不带电脑回去。放假该玩就玩吧。 上面要是都能做到,其实完全解决不了你工作上的问题,完不成的需求还是完不成,面试该挂还是得挂。不过呢,当你再次迷茫,再次焦虑的时候,你会发现,诶,还好,没这么难受。比如面试挂了,可能以前的你会感觉非常难受。但如果你做到以上 4 点,你还是会难受的,但其实又没这么难受,可能你会这样想:既然挂了我还能怎么样?这公司不要我,有的是公司要我!
投递腾讯等公司6个岗位 >
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务