1,typescript里,在有些没有明确指出类型的地方,类型推断会帮助提供类型
let num = 10
let str = 'nineone' //尽管没有声明是什么类型但是ts会自动解析
2,最佳通用类型
let arr = [0,11,true,null] //(number | boolean | null)[]
class animal{
breed:string
}
class dog extends animal{}
class cat extends animal{}
let zoo = [new dog(),new cat()] //(dog | cat)[]
let zoo:animal[] = [new dog(),new cat()] //animal[]
3,上下文类型
//1,typescript类型推断会按另外一种方式,我们称作‘上下文类型’
//2,上下文类型的出现和表达式的类型以及所处的位置相关
window.onmousedown = function(mouseEvent){
console.log(mouseEvent.target) //ok
console.log(mouseEvent.nineone} //不ok
}
//参数类型注解,上下文就会被忽略
window.onmousedown = function(mouseEvent:any){
console.log(mouseEvent.target) //ok
console.log(mouseEvent.nineone} //ok
}
//上下文类型会有很多情况下使用到
//1,通常包含函数的参数,赋值表达式的右边,类型断言,对象成员,数组字面量和返回值语句
//2,上下文类型也会作为最佳通用类型的候选类型
class animal{
breed:string
}
class dog extends animal{}
class cat extends animal{}
function createZoo():animal[]{
return [new dog(), new cat()]
}
//animal dog cat