打字稿:输入'编号| null'不能分配给'number'类型

时间:2017-09-19 18:41:50

标签: typescript

我有以下代码:

let statistics = this.video.getStatistics();

let currentLikeCount : number = statistics!.getLikeCount() ? statistics.getLikeCount() : 1;

但是,在使用Typescript

进行编译时出现以下错误
error TS2322: Type 'number | null' is not assignable to type 'number'.

我的条件检查以查看like count是否为null,如果是,则将其分配给一个数字,但typescript仍会抱怨它可能为null。

如何正确地为数字分配相同的数量?

2 个答案:

答案 0 :(得分:8)

TypeScript无法知道getLikeCount()每次调用时都会返回相同的值。还有很多其他方法可以用不会两次调用函数的方式编写这段代码,例如:

statistics.getLikeCount() || 1

或者

const c = statistics.getLikeCount();
let c2 = c == null ? c : 1;

答案 1 :(得分:1)

只是为了澄清为什么编译器仍然抱怨:

如果您将三元语句写为/ else,则得到

if (statistics!.getLikeCount()) {
    currentLikeCount = statistics.getLikeCount();
} else {
    currentLikeCount = 1;
}

TS编译器独立评估对getLikeCount()的两次调用,从而抱怨可能的空值。 Ryan的回答提供了解决这个问题的可能方法。