Typescript学习(二)

一、类型断言的用途
1.将一个联合类型断言为其中一个类型
注:联合类型可以断言为其中类型,父类可以断言为子类,任何类型可以断言为any类型,any类型可以断言为任意类型。

interface Cat{
	name:string;
	run():void;
}
interface Fish{
	name:string;
	swim():void
}
function isFish(animal:Cat|Fish){
	//if(animal.swim){这样会报错,因为没有判断它的类型
	if((animal as Fish).swim){//为了欺骗编译器,告诉它有类型的
		return true
	}else{
		return false
	}
}	

二、类型别名

type lString=string;
let username:lString="小米"
username=123;//error

type lStringNumber=string|number
let user1: lStringNumber=123//right
user1="123"//right

//约束字符串的取值,约束事件绑定
type Eventname="click"|"scroll"|"mousemove";
let eventStr:Eventname="cli";//error
let eventStr:Eventname1="click";//right

三、枚举类型

enum Days{sun,mon.tue,wed,thu,fri,sat};
console.log(Days["sum"])
console.log(Days[0])

注:
第一次在tsc enum.ts编译后,执行node enum.js
结果:
//undefined
//sun
第二次在tsc enum.ts编译后,执行node enum.js
//0
//sun

enum Days{sun,mon.tue,wed,thu,fri,sat};
let day:Days=Days.sun;
let days:Days[]=[Days.sun,Days.mon];

四、类class
封装、继承、多态、存取器、抽象类、接口
public、private、protected

class Animal{
	public name;
	public constructor(name){
		this.name=name
	}
}
let a= new Animal('Jack')
console.log(a.name)//Jack
a.name="Tom"
console.log(a.name)//Tom

class Animal{
	private name;
	public constructor(name){
		this.name=name
	}
	public sayname(){
		return this.name;
	}
}
let a= new Animal('Jack')
console.log(a.name)//error
a.name="Tom"
console.log(a.name)//error
console.log(a.sayname())//right

public 可以在内外部可用
private 只能内部使用
protected 允许子类访问使用
五、参数属性与只读
readonly

class Animal2{
	public constructor(public name){
	}
}
//相等于
class Animal1{
	public name;
	public constructor(name){
		this.name=name
	}
}

class Animal3{
	public name;
	public readonly color:string;//只读属性
	public constructor(name){
		this.name=name
	}
}
let a1=Animal3('小米','蓝色')
a1.color='红色'//error

六、抽象类

abstract class Animal4{
	public name;
	public constructor(name){
		this.name=name
	}
	abstract public sayhi(){
		return this.name;
	}
}
class Cat4 extends Animal4{
	sayhi(){
		console.log('cat4')
	}
}
let cat4:Cat4=new Cat4();//right
let cat4:Animal4=new Cat4();//right

七、类与接口
类与接口放在一起

//门-》类-》防盗门-》防盗门会响铃
interface Alarm{
	alert():void
}
abstract class Door{
	public abstract open();
}
class SecerityDoor extends Door implements Alarm{//继承接口
	open(){
		console.log('打开门')
	}
	alert(){
		console.log('响铃')
	}
}

八、泛型

//基本写法
function creatArray(length:number,value:any):Array<any>{
	let result=[];
	for(let i=0;i<length;i++){
		result[i]=value;
	}
	return result;
}
//泛型写法
function creatArray<T,U>(length:number,value:T,value2:U):Array<T|U>{
	let result:T[]=[];
	for(let i=0;i<length;i++){
		result[i]=value;
	}
	return result;
}


interface CreateArrayFn{
	<T>(length:number,value:T):Array<T>;
}
let CreateArray2: CreateArrayFn=function<T,U>(length:number,value:T,value2:U):Array<T>{
	let result:T[]=[];
	for(let i=0;i<length;i++){
		result[i]=value;
	}
	return result;
}

class GenericNumber<T>{
	zeroValue:T;
	add(x:T,y:T):number{
		console.log(x)
		return 0
	}
}
let nemberObj=new GenericNumber<number>()
numberObj.add(10,10)
numberObj.add(10,'1')//error,因为在new的时候已经将归类为number类型了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值