启用TypeScript

  • webpack+babel
  • vite2

https://cn.vitejs.dev/guide/#scaffolding-your-first-vite-project

  • tsc ( typescript compilter

λ tsc 1.ts

类型 v.s. 类

JS基本类型

  • 简单类型

null undefined
string boolean number
symbol bigint

  • 复杂类型

object

  • 特殊的 typeof

typeof 函数 → “function”
typeof null → “object”

JS中的类

只针对object
面向对象编程

  • 基于class关键字
  • 基于原型 ```javascript class Person{ 属性1 属性2 属性3 方法1 方法2 方法3 }

const p1 = new Person() p1.属性1 p1.方法1()

  1. > **类型是对所有数据的分组,类只对对象的抽象编程**
  2. **类型的作用**
  3. 1. 减少bug
  4. 1. 提示
  5. <a name="BAwJD"></a>
  6. # TS支持的JS类型
  7. ```jsx
  8. const a: undefined = undefined
  9. const b: null = null
  10. const c: string = 'hi'
  11. const d: boolean = true
  12. const e: symbol = Symbol('hi')
  13. const f: bigint = 123n
  14. const obj: Object={} //类
  15. const obj0: object={} //类型
  16. const arr: Array<string | number | null> = ['1','2',3,null]
  17. //类型写在函数体
  18. const add = (a: number,b: number): number => a+b
  19. //类型写在:后面
  20. const add0:(a: number,b: number)=> number = (a,b) => a+b
  21. //type缩写
  22. type Add = (a: number,b: number)=> number
  23. const add1: Add = (a,b) => a+b
  24. //有属性用interface
  25. interface AddWithProps{
  26. (a: number,b: number) : number
  27. xxx: string
  28. }
  29. const add2: AddWithProps = (a,b) => a+b
  30. add2.xxx = 'yyy'

TS额外的类型

  1. let a: any = 1
  2. a = 'hi'
  3. type B = { name: string }
  4. let b: unknown = JSON.parse('{"name":"frank"}')
  5. console.log((b as B).name) //断言
  6. let print: () => void = function () {
  7. console.log(1)
  8. }
  9. type Dir = 1 | 2 | 3 | 4 | undefined
  10. let dir: Dir = 1
  11. switch (dir) {
  12. case 1:
  13. break;
  14. case 2:
  15. break;
  16. case 3:
  17. break;
  18. case 4:
  19. break;
  20. case undefined:
  21. break;
  22. default:
  23. console.log(dir) //dir: never
  24. break;
  25. }
  26. //tuple 元组
  27. let p: [number, number] = [100.200]
  28. let p2: [number, string, boolean] = [100, 'x', true]
  29. enum Dir1 { 东, 南, 西, }
  30. let d2: Dir2 = Dir1.东 //0
  31. let d3: Dir3 = Dir1.西 //2
  32. console.log(d2, d3) //0 2