我试图将字母的重复映射到哈希图中,然后返回字符串中的第一个非重复字符。以下是我编写的功能:
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
方法可能返回未定义,而我无法继续使用它。
有人知道我在这里丢失了什么导致此错误吗?
答案 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。
!