类型推论

TS推断类型的规则,当我们声明且没有类型定义类型时,TS会按照规则自动推论出适合的

  1. 如果左边没有定义类型,根据值推断左边的类型
  2. 如果是个数组,则将元素推断为联合类型 (type1 | type2)
  3. 如果左边定义了类型,根据类型推断值的类型 ```typescript const a = ‘1234’ // a: string 基础

const arr = [1, ‘213’] // (number | string) [] 多类型联合

type Func = (params: number) => number const func: Func = params => params // (params: number) => number 上下文类型

  1. <a name="ntv8C"></a>
  2. ## 类型兼容性
  3. 为了适应JS灵活的特点,通过另一个变量赋值时,如果两个类型兼容,就可以通过检测
  4. <a name="rD78h"></a>
  5. ### 对象兼容性
  6. ```typescript
  7. interface Info {
  8. name: string
  9. }
  10. let myInfo: Info
  11. const base1 = { name: '阿坤' }
  12. const base2 = { name: '阿坤', play: '篮球' }
  13. myInfo = base1
  14. myInfo = base2
  • 通过变量/属性赋值时,只要对象中包含类型中定义的就能兼容
  • 如果值是一个对象字面量,则不会触发兼容性

函数兼容性

参数数量

let a = ( p1: number ) => 0
let b = ( p1: number, p2: string ) => 0
b = a
  • 赋值函数的参数个数,必须小于等于左边类型的参数个数

返回值类型

let x = (): string | number => 0
let y = (): string => 'a'
x = y
  • 赋值函数的返回值类型,只要被类型定义的包含即可