Тип возвращаемого значения функцией linkShortener определяет два разных результата работы функции. Typescript не знает с чем мы работаем. С объектом в котором data или с объектом в котором error. По этому нам самим нужно сузить тип, в TS это называется Narrowing
https://www.typescriptlang.org/docs/handbook/2/nar.... Если в кратце то тебе нужно убедится что error или data присутствуют в объекте.
const linkShortenerHandler = () => {
linkShortener(url).then(res => {
if ("error" in res.error && res.error) {
if (res.error.data) {
setError(res.error.data)
} else if (res.error.message) {
setError(res.error.message)
}
} else if ("data" in res.data && res.data) {
setResponseContent(res.data)
}
})
}
Нужно учесть что конструкция "bar" in foo возвращает true в случае если свойство существует в объекте игнорируя его значение.
const foo = {
bar: "some value",
bar1: null,
bar2: undefined,
}
console.log("bar" in foo) // true
console.log("bar1" in foo) // true
console.log("bar2" in foo) //true
console.log("bar3" in foo) //false