一、类型断言的用途 1.将一个联合类型断言为其中一个类型 注:联合类型可以断言为其中类型,父类可以断言为子类,任何类型可以断言为any类型,any类型可以断言为任意类型。
interface Cat{
name:string;
run():void;
}
interface Fish{
name:string;
swim():void
}
function isFish(animal:Cat|Fish){
if((animal as Fish).swim){
return true
}else{
return false
}
}
二、类型别名
type lString=string;
let username:lString="小米"
username=123;
type lStringNumber=string|number
let user1: lStringNumber=123
user1="123"
type Eventname="click"|"scroll"|"mousemove";
let eventStr:Eventname="cli";
let eventStr:Eventname1="click";
三、枚举类型
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)
a.name="Tom"
console.log(a.name)
class Animal{
private name;
public constructor(name){
this.name=name
}
public sayname(){
return this.name;
}
}
let a= new Animal('Jack')
console.log(a.name)
a.name="Tom"
console.log(a.name)
console.log(a.sayname())
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='红色'
六、抽象类
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();
let cat4:Animal4=new Cat4();
七、类与接口 类与接口放在一起
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')
|