TypeScriptUnie i zawężanie
Asercja non-null (!)
Wykrzyknik po wyrażeniu usuwa z typu null i undefined bez sprawdzania.
Przykład
#TypeScript
const lessons = new Map<string, number>([['html', 11], ['css', 9]])
const htmlModules = lessons.get('html')!
console.log(htmlModules + 1)
const pythonModules = lessons.get('python') ?? 0
console.log(pythonModules)Wynik
12 0
Definicja i zastosowanie
#Operator ! postawiony po wyrażeniu mówi kompilatorowi: „ta wartość na pewno nie jest null ani undefined”. Typ HTMLElement | null staje się HTMLElement.
Podobnie jak asercja as, niczego nie sprawdza w działającym programie. Jeśli wartość jednak okaże się null, dostaniesz błąd w czasie działania, dokładnie taki, przed jakim chroni strictNullChecks.
Używaj go tylko wtedy, gdy masz pewność z innego źródła, na przykład element istnieje w szablonie strony. W pozostałych przypadkach lepiej obsłużyć brak wartości warunkiem albo operatorami ?. i ??.
Składnia
#Składnia
wyrazenie!Więcej przykładów
#TypeScript
const missing = lessons.get('rust')!
try {
console.log(missing.toFixed(0))
} catch (error) {
console.log('Błąd w działaniu: wartość była undefined')
}Wynik
Błąd w działaniu: wartość była undefined
Dobre praktyki
#- Każdy
!w kodzie to miejsce, w którym wyłączasz ochronę kompilatora. Zastanów się, czy nie lepiej obsłużyć brak wartości. - W testach i szybkich skryptach
!bywa akceptowalny. W kodzie produkcyjnym preferuj jawne sprawdzenia.
Powiązane hasła
#- null i undefinedTypy oznaczające brak wartości, kontrolowane przez strictNullChecks.
- Asercja typu (as)Wskazanie kompilatorowi typu wartości, gdy wiesz więcej niż on.
- Zawężanie typówUstalanie dokładniejszego typu wartości na podstawie sprawdzeń w kodzie.
- "strictNullChecks"Traktuje null i undefined jako osobne typy, wymuszając ich obsługę.
Widzisz błąd albo brakuje przykładu? Napisz do nas.