常量枚举
只需要在枚举前面加const,会内联枚举,提高计算性能
const enum Direction{ Up='UP', Down='DOWN', Right='RIGHT', Left='LEFT', }
- 泛型----generics
泛型出现的动机和要解决的问题:
在定义时没办法确定参数类型和返回类型的时候,在使用时才能确定
可以简单理解为占位符,动态指定类型
function echo(arg:number){ return arg } const result = echo(123) // result is number const result = echo('123') // result is string change arg is string ...
result无法随意匹配any类型
改造后:
function echo<T>(arg:T):T{ // 使用T作为参数占位 return arg } const result:number = echo(123) const result:string = echo('123') const result:boolean = echo(true)
参数是一个数组的时候,加泛型
function swap<T,U>(tuple:[T,U]):[U,T]{ return [tuple[1],tuple[0]] } const result2 = swap(['string',123]) result2[1] // number result2[0] // string
对函数使用泛型加约束
Eg:
function echoWithArr<T>(arg:T):T{ console.log(arg.length) return arg } // 会报错,因为T可能没有length,如果给T加约束 function echoWithArr<T>(arg:T[]):T[]{ console.log(arg.length) return arg } // 改造成了传T类型的数组,错误取消,但是如果想判断字符串的length呢,如果是对象中含有length呢,上面的改造就不能实现了,继续改造 interface IWithLength{ length:number; } function echoWithLength<T extends IWithLength>(arg:T):T{ console.log(arg.length) return arg } const str = echoWithLength('str') const obj = echoWithLength({length:12,width:'12'}) const arr = echoWithLength([1,2,3]) // 以上都可以满足,问题解决
对类使用泛型约束
class Queue<T>{ private data = []; push(item:T){ return this.data.push(item) } pop():T{ return this.data.shift() } } const queue = new Queue<number>(); queue.push(1) const queue2 = new Queue<string>(); queue.push('1')
对接口加泛型
interface KeyPair<T,U>{ key:T; value:U; } let kp1:KeyPair<number,string> = {key:123,value="str"} let kp2:KeyPair<string,number> = {key:"str",value="123"}
对数组加泛型
let arr:number[] = [1,2,3] let arr2:Array<number> = [1,2,3,4]
interface IPlus<T> { // 描述了一个函数的类型 {a:T,b:T}: T } function plus(a:number,b:number){ return a+b; } function connect(a:string,b:string){ return a+b; } const a:IPus<number> = plus; const b:IPus<string> = plus;
- 类型别名和断言as
// 别名 type aliases function sum(x;number,y:number):number { return x+y } const sum2:(x;number,y:number)=>number = sum // sum2 太长,用类型别名 type PlusType = (x;number,y:number)=>number const sum2:PlusType = sum
// 断言 as 分别判断不同类型的不同处理方式 function sum(input:string | number) :number { const str = input as String; if(str.length){ return str.length }else{ const number = input as Number; return number.toString().length } } => function sum(input:string | number) :number { if((<string>input).length){ return (<string>input).length }else{ return input.toString().length } }
- 声明文件
jQuery('#f00');
使用一
declare var jQuery:(selector:string)=>any
一般单独放在一个文件jQuery.t.ts 中声明,以.d.ts结尾
tsconfig.json
{ "include":["**/ *] }
使用二
第三方库
npm install --save @types/jquery
标签: