# Typescript Nullable<T>

Typescript supports two ways of telling if a value is missing or uninitialized. Usually, it doesn't matter if its `null` or `undefined` since people have different approaches and might use one or both of them. A common way to check if a value is `missing` is:

```typescript
if (value == null) {
  ...
}
```

The loose comparison with `null` checks for both `null` and `undefined`. Since we can operate on both types, one might want to get rid of errors like `type null/undefined is not assignable to type | null/undefined...` by introducing the following type:

```typescript
export type Nullable<T> = T | null | undefined;
```

Now, instead of a long repetitive declaration:

```typescript
function (data: string | null | undefined)
```

the short and clean version can be used:

```typescript
function (data: Nullable<string>)
```

Example:

```typescript
class Formatter {
  insertUndescores(data: Nullable<string>): string {
    return data?.split('').join('_') ?? ''; 
  }
}

const formatter = new Formatter();
formatter.insertUndescores(null);
formatter.insertUndescores(undefined);
formatter.insertUndescores('An example');
```
