javascript - Ved å bruke Map.get()-metoden i typescript, returneres undefined, selv om jeg håndterer undefined
Jeg prøver å kartlegge gjentakelsen av bokstaver i et hashmap og deretter returnere det første ikke-gjentatte tegnet i en streng. Følgende er funksjonen jeg har skrevet for å gjøre det:
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);
}
}
};
Likevel, i incrementLetterCount-funksjonen, selv om jeg håndterer å ekskludere undefined-verdier for å få en key i hashmapen, klager den fortsatt over Object is possibly 'undefined', noe som betyr at get-metoden kan returnere undefined og jeg kan ikke gå videre med det.
Vet noen hva jeg mangler her som resulterer i denne feilen?
Svar #1
Jeg fant følgende løsning på problemet mitt, men er fortsatt ikke sikker på hvorfor den opprinnelige kodebiten ga en kompileringstid-feil (selv om koden sjekket mot undefined-verdier).
Det ser ut til at vi i Typescript kan påstå at operanden ikke er null/undefined (herfra).
En ny
!postfiks-uttrykksoperator kan brukes for å påstå at operandet ikke er null og ikke er udefinert i kontekster der typekontrolløren ikke klarer å konkludere med dette. Spesifikt produserer operasjonen x! en verdi av typen til x med null og udefinert ekskludert.
function incrementLetterCount(
aLetter: string,
aLettersHashMap: Map<string, number>
): void {
aLettersHashMap.set(aLetter, aLettersHashMap.get(aLetter)! + 1);
}
Svar #2
En annen grunn er at tsconfig.json kan ha følgende innstillinger
"strict": true, /* Aktiver alle strenge typekontrollalternativer. */
Hvis du fjerner linjen, bør feilen forsvinne.
