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);