4

这是打字稿中的代码片段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?最佳做法是什么?

4

1 回答 1

4

通过严格的空检查,任何返回可能“未找到”的函数的返回类型都应该声明为Something | undefined,并且它应该undefined在“未找到”的情况下返回值。

也可以使用null而不是undefined,作为类型和返回值,但是选择了并且 TypeScript 类型系统使用undefined,而不是null表示未初始化和可选值 - 例如,可选属性的类型(用?符号声明)是T | undefined.

另请参阅用户 cal_b 在评论中提到的此引用:

合理的是 JavaScript 有两个概念来指代空标记值,大多数其他编程语言只有一个。此外, undefined 始终存在,因为所有未初始化的值在运行时都具有 undefined 值。另一方面,null 是可以避免的,特别是如果您没有使用任何生成它的 API,例如 TypeScript 编译器不使用的 DOM。

于 2018-05-09T21:47:38.747 回答