如何检查打字稿中的address属性是否为null?

时间:2020-07-31 13:20:49

标签: javascript reactjs typescript

如何检查地址是否为空?如果地址为空,则将城市,州和国家/地区设置为黑色字符串。代码是这样的,

const getOrdersData = (
  data: OrderDataProps
): [] | {} => {
  return data.map(
    ({
      transactionDetail: {
        orderedAtUserTz,
        amountInCents: { total },
        status,
        contactByContactId: {
          emailAddresses,
          gender,
          address: { city, state, country },
          name: { firstName, fullName },
        },
        items,
      },
      id,
      settledAmount,
    }: Transaction) => ({ 
      date: [orderedAtUser],
      amount: [settledAmount, status],
      location: [city, state, country],
      customer: [
        firstName || fullName,
        emailAddresses && emailAddresses[0] ? emailAddresses[0].email : '',
        gender,
      ],
      products: items,
      id,
    })
  )
}

如果地址为空,则会引发类似can't read property city of null.

的错误

1 个答案:

答案 0 :(得分:1)

首先,在使用接口时,请确保您传递的参数是针对每个接口结构的,否则 使用这种类型严格的接口将毫无意义。 假设您的地址不应该是 null,它应该是带有空白字符串或至少一个空对象的键的对象。

因此,如果我们有空白对象,考虑到这一点,将默认值作为空白字符串传递是有意义的。不需要更改回调函数,但可能必须更改Transaction接口属性。 因此,在破坏论证的同时 例如:

{city = '', state ='', country=''}

如果还是要使用address作为null的值。我们需要验证 回调函数。需要维护一个address属性,而不是 在参数中将其分解为city, state等。 例如:

{
      ...
      gender,
      address,
      ...
  }

在回调函数中,我们需要对其进行验证和重构。

() =>{
      let location = []; // or ['','','']
      if(address){
        const {city, state, country} = address;  
        location = [city, state, country];
      }

      return {
          ...,
          location
          ...
      }
  }