@daniel_wesson

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

Имеется следующий код в упрощенном виде:

type User = {
	id: number
	name: string
}

const { data: user, error } = await useFetch<User>('/users/1')

if (error.value?.statusCode === 404) {
	throw createError({ statusCode: 404 })
}

const userId: number = user.id


Проблема в том, что useFetch вернет тип "User | null" из-за чего чтобы получиться любое свойство, придется написать "(user as User).id". Что можно сделать чтобы явно указать, что user не будет являться null?
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
if (error.value?.statusCode !== 404) не гарантирует, что в user не будет null, мало ли там ошибка 50х или даже нет ошибки, а просто сервер глюканул.

Так что у тебя два варианта:
1. То что от тебя хочет typescript, явная проверка:
if (!user) {
  throw new Error('empty responce')
}

2. Исправление типа, если ты очень доверяешь своему серверу:
а) Вариант предложенный Lynn «Кофеман» с явным кастом;
б) Обёртка над useFetch которая внутри себя скастует тип по новому или изменение самого типа useFetch.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы