属性'error'在类型 '{} | user | error' 上不存在


type user = {
id: number,
token: string
}
type errorObject = {
error: string
}
interface authState {
user: user | {} | errorObject,
}
const initialState: authState = {
user: {}
}
const error : errorObject = {"error": "hi"}
initialState.user = error
console.log(initialState.user.error) // Property 'error' does not exist on type '{} | user | error'.

为什么会出现这个错误?它有一个错误属性为什么它说它不存在?我困惑。

我的目标是让user对象成为以下类型中的任意一种:

user = {} 
// or
user = {"id": number, "token": "1234"}
// or
user = {"error": "error"}

你的类型太宽泛了,编译器会抛出错误,因为该属性可能不存在于参数中。

如果您确定在给定的情况下会存在error属性,则可以使用类型断言。

交货。(initialState.user as errorObject).error

或者如果你不确定,你可以创建你自己的用户定义类型保护,例如:

function instanceOfErrorObject(data: user | {} | errorObject): data is errorObject {
return data.hasOwnProperty("error");
}

如果你在访问error属性之前调用这个函数,编译器会知道它是一个合适的类型:

const user = initialState.user;
if (instanceOfErrorObject(user)) console.log(user.error);

相关内容

最新更新