这里是使用strictNullChecks: true
getItem(key: string): T {
let index: number = this.contains(key); // returns -1 if not found
if (index === -1) {
return null; // error null is not assignable to type 'T'
}
return this.map[index].value;
}
正如您所看到的,当我因为编译错误而找不到元素时,我无法返回null:
错误' null'不能分配给' T'
我应该返回什么而不是null?什么是最佳做法?
答案 0 :(得分:1)
使用严格的空检查,任何返回可能未找到的内容的函数'应该具有声明为Something | undefined
的返回类型,并且它应该在&#34中返回undefined
值;未找到"情况下。
也可以使用null
代替undefined
作为类型和返回值,但是做出了选择并且TypeScript类型系统使用undefined
,而不是null
?
用于表示未初始化和可选的值 - 例如,可选属性的类型(使用T | undefined
符号声明)为div
。
另请参阅评论中用户cale_b提到的this quote:
理性是JavaScript有两个概念来引用空 sentinel值,大多数其他编程语言只有一个。 此外,undefined始终存在,因为所有未初始化的值 在运行时具有未定义的值。另一方面,null是 可避免的,特别是如果您没有使用任何产生它的API, 例如DOM,TypeScript编译器不使用的。