TypeScript(1)
1.数据类型
1.1 基本数据类型
const a: number = 1 const b: string = '123' const c: boolean = true //undefined and null belongs to other types const d: null = null const e: undefined = undefined
1.2 引用数据类型
const a : number[] = [] //all elements are number type const a1 : Array<number> = [] const b : string[] = [] //all elements are string type const b1 : Array<string> = []
1.3 any、void
const a : any = {} // a can be any type const arr : any[] = [1,'222',true,{}] const b : void = undefined // void is return nothing
1.4 类型推断
let a = '123' //equal to let a : string = '123'
1.5 联合类型、交叉类型
// 联合类型 const b : string | number = '123' const b : string | number = 123
// 混合类型 interface A { name:string } interface B { age:number } const a : A & B = { name:'123', age:123 }
2.接口
2.1 对象接口
interface Obj { readonly id: string // string type && only read name: string //string type age: number //number type action?: Function //Function type && not required [propName: string]: any //propName is key name, belongs to string type, value belongs to any type } const obj: Obj = { id: '1234', name: 'abc', age: 123, otherMethod: '1827', money: true, }
2.2 数组接口
interface Arr { //index is array's index, belongs to number type //any is elements type [index: number]: any } const arr: Arr = [1, '123', {}, true, null, () => {}]
2.3 函数接口
interface Fun { (a: string, b: string): boolean } const fun: Fun = function (a: string, b: string): boolean { return true }
3.函数
3.1 定义函数
//parameter: a, b belongs to number, return data belongs to boolean //函数声明 function fun(a: number, b: number): boolean { return !!(a + b) } //函数表达式 const f = function fc(a: number, b: number): boolean { return !!(a + b) }
3.2 函数重载
//use one function to handle two different types function fun(a: string, b: string): string function fun(a: number, b: number): number function fun(a: string | number, b: string | number): string | number { if (typeof a === 'number' && typeof b === 'number') return a * b else return `${a}${b}` } // arrow function can't use interface type Func = { (a:number,b:number):number (a:string,b:string):string (a:Function,b:object):boolean (a:boolean,b?:boolean):Function } const func = ((a:number|string|Function|boolean,b?:number|string|object|boolean):number|string|boolean|Function => { if(typeof a === 'string' && typeof b === 'string'){ return `${a}${b}` } else if(typeof a === 'number' && typeof b === 'number') { return a + b } else if(typeof a === 'function' && typeof b === 'object') { return true } else return ()=>{} }) as Func
4.类型断言
//options will be two different kinds of types //string type we don't want to toString function func(option: number | string): number { return option.toString().length } //if using option.length to judge option whether is string type, throw error function func2(option: number | string): number { if(option.lenth)return option else return option.toString().length } //使用类型断言 function func3(option:number|string):number{ if((option as string).length) return (<string>option).length else return option.toString().length }