TypeScript: как убрать null из свойства объекта?

В TypeScript может быть полезно избежать значения null для свойств объектов, чтобы предотвратить ошибки времени выполнения, а также чтобы код был более читаемым и безопасным. Существует несколько способов сделать это:

1. Используйте оператор ! (небезопасно):
Если вы уверены в том, что свойство объекта не будет null или undefined, вы можете использовать оператор ! после имени свойства, чтобы сообщить компилятору TypeScript, что свойство гарантированно будет иметь значение. Например:

   const obj: { prop: string } = { prop: "value" };
   const propValue: string = obj.prop!;

Однако это решение небезопасно, поскольку компилятор не делает проверку наличия значения, поэтому в случае, если свойство ожидаемо null или undefined, возникнет ошибка времени выполнения.

2. Используйте условное выражение с проверкой на null или undefined (безопасно):
Проверка на null или undefined может быть выполнена с использованием условного (тернарного) оператора. Вы можете задать значение по умолчанию, которое будет использоваться, если свойство null или undefined. Например:

   const obj: { prop: string | null | undefined } = { prop: null };
   const propValue: string = obj.prop !== null && obj.prop !== undefined ? obj.prop : "default";

Это безопасный способ избежать ошибок времени выполнения, поскольку код будет выполняться только в том случае, если свойство не равно null или undefined.

3. Используйте Non-null assertion оператор:
В TypeScript с версии 2.7 появился специальный оператор Non-null assertion (!), который позволяет указать, что переменная не может быть null или undefined. Например:

   const obj: { prop: string | null | undefined } = { prop: "value" };
   const propValue: string = obj.prop!;

Данный подход является безопасным, поскольку компилятор TypeScript проверяет, что свойство не может быть null или undefined перед тем, как присвоить его переменной.

4. Используйте Type assertion:
Вы можете использовать Type assertion, чтобы явно указать TypeScript ожидаемый тип значения, пропустив проверку на null или undefined. Например:

   const obj: { prop: string | null | undefined } = { prop: "value" };
   const propValue: string = obj.prop as string;

Однако необходимо быть осторожным при использовании этого метода, так как неправильное выполнение приведет к ошибкам времени выполнения компилятора.

В конечном счете выбор конкретного метода зависит от контекста использования и требований вашего проекта.