Вопрос скорее метафизический.
Начал работать с typescript (в контексте react.js). До этого программировал на java долго и сейчас программирую, и недолго на javascript. Сейчас у меня дилемма, чем лучше инициализировать переменные. Присваивать им null, или какие то дефолтные значения.
Мне нравится, что в typescript надо явно указывать, что переменная может принимать null значение. В коде сразу видно, что нужно этот случай обработать. Но с другой стороны, я стал избегать использования null значений при инициализации.
Допустим есть какой то Context, в котором хранится какое то состояние получаемое от сервера. Структура User, с несколькими полями, к примеру имя, айдишник, его баланс, число сообщений в личной почте итп
Я теперь стараюсь проинцииализировать контекст как то так
const EMPTY_USER : UserDto = {
id: "",
name: "",
balance: 0,
newMessages: 0,
role: Roles.EMPTY_ROLE
}
const [user, setUser] = useState<UserDto>(EMPTY_USER);
Приемущество в том, что мне не надо в коде проверять на null, поля просто отобразятся пустыми.
Альтернативно, можно написать
const [user, setUser] = useState<UserDto | null>(null);
Так имхо проще в том, смысле, что не надо выдумывать фейковые, пустые значения, типа Roles.EMPTY_ROLE и еще и делать их отображение. Но в коде еще надо проверять на Null, код заграмождается if-ами, всякими if(null) return EmptyComponent(); Плюс если разрешить null значения, то порой иногда непонятно, где в цепочке вызовов это значение потерялось. Сложнее для отладки.
Дефолтные значения с другой стороны тоже могут сыграть злую шутку. К примеру может отправится запрос на сервер, потому, что непонятно с первого раза, реальное значение получили в компонете как параметр или это пустая структура.
Типа такого
const {user} = useContext(userContext);
useEffect(() => {
fetch(userDetailsUrl + "/" + user.id)
},[])
Довольно часто случается. Просто забываешь сделать проверку. Если бы был null, то сразу в коде было бы видно, что не стоит делать REST вызов, а с дефолтными значениями просто не обращаешь внимания. В результате ненужный вызов api.