繁体   English   中英

typescript接口中如何使用OR运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM