我经常遇到这样的情况,在继续之前,我需要在函数中键入check一个变量.就我个人而言,我喜欢在可能的情况下避免嵌套代码,并经常使用早期返回语句,以便函数的主要功能位于末尾并且不嵌套.对我来说,它使代码更具可读性和可维护性.然而,打字文本类型判断器似乎不喜欢这样.
下面的代码让类型判断器很生气,因为cupcake_name
可能不是dessert
变量的属性.
function what_kind_of_cupcake(dessert: Cupcake | Cookie){
if (dessert instanceof Cupcake === false) return
console.log(dessert.cupcake_name)
}
但是,此代码满足打字脚本的要求.
function what_kind_of_cupcake(dessert: Cupcake | Cookie){
if (dessert instanceof Cupcake) {
console.log(dessert.cupcake_name)
}
}
我知道这两个函数在技术上都是有效的,而且两种编码风格都有时间和地点.这也是我面临的问题的一个非常简化的版本.我的问题是,类型判断器如何理解这两个函数,以及是否有方法可以修改TSconfig以支持以前的编码风格.
为了解决这个问题,我有时会重新声明变量并使用关键字as
来绕过类型判断器,尽管我不想一直这样做.
function what_kind_of_cupcake(dessert: Cupcake | Cookie){
// type of 'desert' is undetermined at this point. Could be a Cupcake or a Cookie
if (dessert instanceof Cupcake === false) return
// recast dessert?
dessert = dessert as Cupcake
console.log(dessert.cupcake_name)