[英]How to use OR operator in typescript interface
我正在尝试在typescript interface
中为object key
提供一种或另type
的密钥。 我不知道它是否重要,但是 State 1 和 State 2 是完全不同的对象
但是,我收到类型错误。 有人能帮助我吗?
State_2 only refers to a type, but is being used as a value here.ts(2693)
interface State_1 {
id: number
calls: string[]
}
interface State_2 {
adress: string,
time: Date,
}
export interface ResponseData {
....
state: State_1 || State_2
}
如果我使用联合运算符,我将无法使用该界面,并且出现错误
export interface ResponseData {
....
state: State_1 | State_2
}
responsdata.state.time --> Error ....Property 'time' does not exist on type 'State_1 || State_2'.
export interface ResponseData {
state: State_1 | State_2
}
您需要将其指定为联合类型:您将 ResponseData 的属性state
描述为符合 State_1 或 State_2。 正如预期的那样,State_1 和 State_2 上都不存在属性time
,因此您不能在没有警卫的情况下使用它。
function processResponseData(responseData: ResponseData) {
// responseData.state could be State_1 or State_2
if ("time" in responseData.state) {
// Now we can be sure that responseData.state is State_2
console.log(responseData.state.time);
}
}
您可以使用||
区分,但奇怪的是,只有在设置time: never
在 State_1 上。 这有助于 TypeScript 确保您没有带有额外属性time
的 State_1 ,它可以是string
或任何其他类型。 否则我会期望上面的in
类型保护也需要这个。
function processResponseData2(responseData: ResponseData) {
// Only works with "time: never" in State_1 above
console.log(responseData.state.time || "No time like the present");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.