我有一个关于在类中设置联合类型的简单示例。
class Foo {
constructor() {}
progress: number | string = 0;
bar() {
this.progress = this.progress + 5;
}
}
我本以为会增加5,但却收到一个ts(2365)错误。
Operator '+' cannot be applied to types 'string | number' and '5'.ts(2365)
我认为这是可行的,因为如果我在下面这样的类之外设置它。
let progress: number | string = 0;
progress = progress + 5;
没有错误。
最后,我要做的是在一个类声明中设置一个变量,它接受来自
setInterval
的一个数字,所以我尝试将变量设置为UNIX和NodeJS.Timer
的联合类型,因为setInterval
返回NodeJS.Timer
。export class CurrentTrainingComponent implements OnInit {
interval: number | NodeJS.Timer;
progress: number = 0;
constructor() {}
ngOnInit() {
this.interval = setInterval(() => {
this.progress = this.progress + 5;
if (this.progress >= 100) {
clearInterval(this.interval);
}
}, 100);
}
onStop() {
clearInterval(this.interval);
}
}
我知道我可以简单地分配
<any>
来解决这个问题,但我想看看是否可以尝试联合类型。与此问题无关的最后一件事,设置
this.interval = <any>setInterval( ()=>{} )
到<number>
显示警告setInterval
最佳答案
在bar函数中,您不能确定您的值现在是一个数字。
您可以添加额外的支票使其生效
class Foo {
constructor() {}
progress: number | string = 0;
bar() {
if (typeof this.progress === 'number')
this.progress = this.progress + 5;
}
}
万一
let progress: number | string = 0;
progress = progress + 5;
值肯定是一个数字(它被指定在上面的一行)
关于typescript - 类内的Typescript联合类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56026681/