---
tags:
  - typescript
---

# Non-null assertion

Oftentimes you will encounter errors of the form:

`Property [property_name] does not exist on type [type_name].ts(2339)`

This means the interpreter is not able to determine whether the property which
you are seeking to change exists. It can't be sure that you are not trying to
update a property that is either `null` or `undefined`. This is good type
checking but it means that in cases when _you know_ the property either exists
or _will_ exist at runtime, you are going to face a code-breaking error.

To get around this you can use non-null assertion. Like the name suggests, here
you are saying to TypeScript: thanks but I am sure this property exists. When
you do this you get the value you are trying to change with `null` and
`undefined` excluded from it.

This typically occurs when you are assigning a property to a value and TS
doesn't know whether the value will exist or be accessible at this point in the
runtime. A good scenario would be dynamic data passed into a function:

```ts
function doSomethingWith(typeAlias: ITypeAlias) {
  let x = typeAlias!.somePropertyEvidentAtRuntime;
}
```

However it should be used carefully and sparingly because you are obviously
turning off core type-checking and overuse nullifies the purpose of TypeScript.

One way to get around it is to use better
[type-guarding](Type_guarding_and_narrowing.md) and conditionality and to
cover cases where the value may be undefined.
