在打字稿中使用Map.get()方法返回未定义,而我正在处理未定义

时间:2020-06-07 21:56:11

标签: javascript typescript hashmap

我试图将字母的重复映射到哈希图中,然后返回字符串中的第一个非重复字符。以下是我编写的功能:

export const firstNonRepeatedFinder = (aString: string): string | null => {
  const lettersMap: Map<string, number> = new Map<string, number>();

  for (let letter of aString) {
    if (!lettersMap.has(letter)) {
      lettersMap.set(letter, 1);
    } else {
      incrementLetterCount(letter, lettersMap);
    }
  }

  for (let letter of aString) {
    if (lettersMap.get(letter) === 1) return letter;
  }

  return null;

  function incrementLetterCount(
    aLetter: string,
    aLettersHashMap: Map<string, number>
  ): void {
    if (
      aLettersHashMap.has(aLetter) &&
      aLettersHashMap.get(aLetter) !== undefined
    ) {
      aLettersHashMap.set(aLetter, aLettersHashMap.get(aLetter) + 1);
    }
  }
};

但是,在incrementLetterCount函数中,尽管我正在设法排除undefined值以在哈希图中获取key,但它仍然抱怨Object is possibly 'undefined',这意味着get方法可能返回未定义,而我无法继续使用它。

有人知道我在这里丢失了什么导致此错误吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的以下解决方案,但仍然不确定为什么原始代码段会引发编译时错误(尽管代码正在检查export const Photos = () => { const backgroundContext = useContext(BackgroundContext); const { photos, loading } = backgroundContext; if (loading) { return <Spinner />; } else { return ( <div> { photos.length && <Background key={photos.id} photos={photos[0]} /> } </div> ) } } 值)。

似乎在Typescript中我们可以断言操作数不是undefined(来自here)。

在类型检查器无法得出结论的情况下,可以使用新的null/undefined后缀表达式运算符来断言其操作数是非null且未定义的。具体来说,就是操作x!产生x类型的值,其中排除了null和undefined。

!