使用严格模式在TypeScript中找不到对象时应该返回什么?

时间:2018-05-09 21:21:19

标签: javascript typescript strictnullchecks

这里是使用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?什么是最佳做法?

1 个答案:

答案 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编译器不使用的。