TypeScript Learning 6 - 类型检查

类型推论

类型推论就是在我们不提供类型时,ts自己推断变量该属于哪个类型。比如,我们输入let a = 3后,虽然我们没有注解a是一个number类型,但是ts自己会推断为a是一个number类型的变量。

当推论更复杂的类型时,ts会推论一个最佳通用类型来适应当前变量。

类型兼容

类型兼容总的来说就是在遇到两个变量互相赋值(包括函数传参)时,二者的兼容性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
let a = {
name: 'w3ctalk',
age: 18
}

let b = {
name: 'scrd',
age: 19,
married: true
}

// b能赋值给a.
a = b
// a不能赋值给b,会报错.
b = a // error

情况比较多,没必要一一列举,请自查文档,总结就是:

结构兼容:成员少的兼容成员多的
函数兼容:参数多的兼容参数少的

类型保护

主要在使用联合类型时使用到,在ts特定区块保证变量属于某种确定的类型,比如下面的代码,为了能够使用,我们用了好多类型断言:

1
2
3
4
5
6
7
8
let pet = getSmallPet()

if ((<Fish>pet).swim) {
(<Fish>pet).swim()
}
else {
(<Bird>pet).fly()
}

这时,我们用一段代码来去掉这些断言:

1
2
3
4
5
6
7
8
9
10
11
function isFish(pet: Fish | Bird): pet is Fish {
return (<Fish>pet).swim !== undefined
}

// 上面的代码使用如下,这就是类型保护.
if (isFish(pet)) {
pet.swim()
}
else {
pet.fly()
}

类型保护有四种方法:

  • 用户自定义的类型保护
  • typeof类型保护
  • instanceof类型保护
  • in类型保护

欢迎留言讨论 ^_^ ~

生不如猫系列