TS基础2(泛型、枚举、元组)-学习笔记

泛型
function hello<T>(name:T):T{
return name
};
hello<string|number>(123);
hello(123);
function hello3(name:any):any{
return name
};
hello3(123);
function f<T>(x:T):T{
return x
};
let f2 = function<U>(x:U):U{
return x
}
let f3 = <U>(x:U):U=>{
return x
}
function hello4<T>(name:T):number{
return name.length
};
function hello5<T>(name:T[]):number{
return name.length
};
hello5<string >(['1','2','3'])
interface LengthN{
length:number
}
function hello6<T extends LengthN>(name:T):number{
return name.length
};
hello6<string>('222');
let arr:Array<number> =[1,2,3];
var arr2:number[] = [1,2,3];
function createArray(length:number,value:any):Array<any>{
var arr = [];
for(let i=0;i<length;i++){
arr[i] = value
};
return arr;
};
createArray(5,'a') ;
function createArray2<T>(length:number,value:T):Array<T>{
var arr = [];
for(let i=0;i<length;i++){
arr[i] = value
};
return arr;
};
createArray2<number>(5,3) ;
function f6<N,S>(a:[N,S]):[S,N]{
return [a[1],a[0]]
};
f6<number,string>([1,'a'])
class A2<T>{
n:T;
constructor(num:T){
this.n = num
}
action(x:T):T{
return x
}
};
var a2 = new A2<number>(1);
枚举
var arr7 = ['a','b','c'];
arr7['a']
var obj = {a:1,b:2};
obj[1]
enum Color {red,green,blue,'a','b','c'};
var c:Color= Color.red
var c2:string = Color[1]
enum Color2 {red=10,green,blue};
var c3:Color2= Color2.green
enum Color3 {red=30.7,green=20,blue=10};
var c4:Color3= Color3.green
var c11 = 'hello';
enum Color4 {red=30.7,green=<any>c11,blue=c11.length};
var c5:Color4= Color4.green
元组
var lists:number[] = [1,2,3,4,5];
var lists2:Array<string> = ['1','2'];
var lists3:Array<any> = ['1','2',true,1,2];
var t:[number,string] = [10,'a'];
例子参考
enum Gear {
First=1, Second=3, Third=5
}
enum Color {
White, Red
}
interface Drivable {
start(): void;
drive(time: number, speed: Gear): void;
getKilometer(): number
}
abstract class Car implements Drivable {
protected _isRunning: boolean;
protected _distanceFromStart: number;
constructor() {
this._isRunning = false;
this._distanceFromStart = 0;
}
public start() {
this._isRunning = true;
}
abstract drive(time: number, speed: Gear): void;
public getKilometer(): number {
return this._distanceFromStart;
}
}
class BMW<T extends Color> extends Car {
private color: Color;
constructor(T) {
super();
this.color = T;
}
public drive(time: number, speed: Gear): void {
if (this._isRunning) {
this._distanceFromStart += time*speed;
}
}
public getColor(): string {
return Color[this.color]
}
}
let bmw = new BMW(Color.Red);
bmw.start();
bmw.drive(10, Gear.First);
bmw.drive(60, Gear.Third);
document.body.innerHTML = "distance:"+bmw.getKilometer()+',color:'+bmw.getColor()