• 使用declare 创建第三方库的声明文件,一般第三方库都有官方维护的声明文件,可通过npm 安装,比如@types/jquery

    枚举

    ```typescript enum Direction{ Up, Down, Left, Right } const value = ‘UP’ if(value === Direction.Up){ console.log(‘go up’) } //使用常量枚举可以提升性能 const enum Direction{

}

  1. <a name="Jn7p6"></a>
  2. ### type 类型别名/类型断言
  3. ```typescript
  4. type PlusType = (x:number,y:number) =>number
  5. function sum(x:number,y:number):number{
  6. return x+y
  7. }
  8. const sum2:PlusType =sum
  9. type NameResolver = ()=>string
  10. type NameOrResolver = string | NameResolver
  11. function getName(n:NameOrResolver):string{
  12. if(typeof n === 'string'){
  13. return n
  14. }else{
  15. return n()
  16. }
  17. }
  18. //类型断言
  19. function getLength(input:string | number):number{
  20. if((<string>input).length){
  21. return (<string>input).length
  22. }else{
  23. return input.toString().length
  24. }
  25. }

interface

用来描述类,函数,数组等等;描述类的形状,对类进行抽象,鸭子类型

只读属性,可选属性

  1. interface Person{
  2. readonly id:number; //只读
  3. name:string;
  4. age?:number//可选
  5. }

函数

  1. const add = function(x:number,y:number,z:number=10):number{
  2. if(typeof z ==='number'){
  3. return x +y +z
  4. }
  5. return x+y+z
  6. }
  7. const add2:(x:number,y:number,z?:number) => number = add

  • 定义一切事物的抽象特点
  • 对象就是类的实例
  • 面向对象(封装、继承:()、多态)
    1. //ts-node 插件直接运行ts文件
    2. //readonly
    3. //static
    4. //pravite :自身
    5. //protected:自身+ 子类
    6. //public :自身 + 实例+ 子类 都可调用
    7. //implement
    8. interface Radio {
    9. switchRadio():void
    10. }
    11. interface Battery{
    12. checkBatteryStatus()
    13. }
    14. interface RadioWithBattery extends Radio{
    15. checkBatteryStatus()
    16. }
    17. class Car implements Radio{
    18. switchRadio(){
    19. }
    20. }
    21. class Cellphone implements RadioWithBattery{
    22. switchRadio(){
    23. }
    24. checkBatteryStatus(){}
    25. }
    26. class Cellphone implements Radio,Battery{
    27. switchRadio(){
    28. }
    29. checkBatteryStatus(){}
    30. }

    联合类型

    1. //基础联合类型
    2. let a:string |number
    3. a =1
    4. a="123"
    5. //对象联合类型
    6. interface Women{
    7. age:number;
    8. sex:string;
    9. cry():void
    10. }
    11. interface Man{
    12. age:number;
    13. sex:string
    14. }
    15. declare function People():Women|man;
    16. let p = People();
    17. p.age = 18
    18. p.cry() //报错

    交叉类型

    ```typescript interface People{ age:number; height:number } interface Man{ sex:string } const rt = (man:People & Man) =>{

} rt({age:18,heigt:160,sex:’women’})

  1. <a name="AgeiE"></a>
  2. ### 泛型 Generics
  3. ```typescript
  4. //使用函数、接口或者类的时候才指定类型 (参数返回值)
  5. function echo<T>(arg:T):T{
  6. return arg
  7. }
  8. const res = echo(123)
  9. function swap<T,U>(tuple:[T,U]):[U,T]{ //tuple元祖
  10. return [tuple[1],tuple[0]]
  11. }
  12. const res2 = swap(['string',123])
  13. //泛型可以看做占位符,使用的时候动态填入确定的类型值
  14. interface IWithLength{
  15. length:number
  16. }
  17. function echoWithLength<T extends IWithLength>(arg:T):T{
  18. console.log(arg.length)
  19. return arg
  20. }
  21. const str = echoWithLength('334')
  22. const obj = echoWithLength({length:10,width:100})
  23. const arr = echoWithLength([1,2,3])
  24. //类中使用泛型
  25. class Queue<T>{
  26. private data = [];
  27. push(item:T){
  28. return this.data.push(item)
  29. }
  30. pop():T{
  31. return this.data.shift()
  32. }
  33. }
  34. const q1 = new Queue<number>()
  35. const q2 = new Queue<string>()
  36. interface KeyPair<T,U>{
  37. key:T;
  38. value:U
  39. }
  40. let k1:KeyPair<number,string> = {key:123,value:'str'}
  41. let k2:KeyPair<string,number> = {key:'test',value:2}
  42. let arrNew: Array<number> = [1,2,3]
  43. //描述函数
  44. interface IPlus<T>{
  45. (a:T,b:T):T
  46. }
  47. function plus(a:number,b:number):number{
  48. return a +b;
  49. }
  50. function connect (a:string,b:string):string{
  51. return a +b
  52. }
  53. const a:IPlus<number> = plus
  54. const b:IPlus<string> = plus

为什么使用?

  • ts是js 的超集,加强版,

promise.cache //promise 缓存 ,,,缓存装饰器

react-window

react-placeholder



  • 缓存装饰器