Jeśli zmienna jest optional
, co znaczy że poza wskazanym typem może przechowywać również undefined
, to wykrzyknik na końcu upewnia kompilator, że w tym miejscu zmienna zawsze będzie przechowywała określoną wartość inną niż undefined
.
type RandomType = { optionalValue?: string } const rt: RandomType = {optionalValue: "random"}; rt.optionalValue.length // 'rt.optionalValue' is possibly 'undefined'. rt.optionalValue!.length // no error thrown.
W powyższym przykładzie zastosowanie !
jest bezpieczne, ponieważ istnieje pewność, że wartość optionalValue
zawsze jest różna od undefined
.
Operator ten powinien być wykorzystywany z rozwagą, ponieważ jeśli wartość jednak będzie równa undefined
, kod narażony jest na błędy typu Cannot read properties of undefined
.
type RandomType = { optionalValue?: string } const rt: RandomType = {}; rt.optionalValue!.length // Cannot read properties of undefined (reading 'length')