类型推断最佳通用类型

let x = [0, 1, null]

class Animal {
  numLegs: number
}

class Bee extends Animal {

}

class Lion extends Animal {

}

let zoo = [new Bee(), new Lion()]
//上述例子我们想让zoo推断为Animal数组类型
//但是这个数组中没有对象明确是Animal类型的
//因此zoo不能推断出
//可以明确声明出期望的类型
let zoo1: Animal[]  = [new Bee(), new Lion()]
//如果我们没有声明,类型推断会根据Bee和Lion推断出联合声明类型

类型推断之上下文类型

window.onmousedown = function (mouseEvent) {
  //console.log(mouseEvent.clickTime)//报错
  //mouseEvent上没有clickTime属性
  //TS会根据window.mousedown推断出mouseEvent类型
}
//我们可以指出mouseEvent类型
window.onmousedown = function (mouseEvent :any) {
  console.log(mouseEvent.clickTime)
}
class Animal {
  numLegs: number
}

class Bee extends Animal {

}

class Lion extends Animal {

}

function createZoo(): Animal[] {
  return [new Bee(), new Lion()]
  //这个例子最佳通用类型有三个分别是
  //Animal,Lion,Bee类型
  //在这里我们使用Animal作为最佳通用类型
}

2019-05-29  16:02:13

posted on 2019-05-29 16:03  旧梦丶  阅读(89)  评论(0编辑  收藏  举报