类型推论
TS推断类型的规则,当我们声明且没有类型定义类型时,TS会按照规则自动推论出适合的
- 如果左边没有定义类型,根据值推断左边的类型
- 如果是个数组,则将元素推断为联合类型
(type1 | type2)
- 如果左边定义了类型,根据类型推断值的类型 ```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 上下文类型
<a name="ntv8C"></a>
## 类型兼容性
为了适应JS灵活的特点,通过另一个变量赋值时,如果两个类型兼容,就可以通过检测
<a name="rD78h"></a>
### 对象兼容性
```typescript
interface Info {
name: string
}
let myInfo: Info
const base1 = { name: '阿坤' }
const base2 = { name: '阿坤', play: '篮球' }
myInfo = base1
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
- 赋值函数的返回值类型,只要被类型定义的包含即可