【问题标题】:Typescript: Object is possibly 'undefined' for an object with different types of children打字稿:对于具有不同类型子对象的对象,对象可能是“未定义的”
【发布时间】:2021-11-20 13:53:01
【问题描述】:

我有一个可以有两种孩子的对象

type data = {
  name: Names[];
}
type Names = {
    name?: string;
    names?: string[];
};

我正在编写一个适配器来根据架构配置响应数据

const name = data[dataLength - 1].hasOwnProperty('name') ? data[dataLength - 1].name : data[dataLength - 1].names[0]
      

data[dataLength - 1].names[0] 是我收到Object is possibly 'undefined'.ts(2532) 的地方

我该如何解决这个问题?

【问题讨论】:

  • data[index].namesnames?: string[],即 可选 属性,因此可能确实未定义。您有两个单独的可选属性,不能保证一个或另一个。可能你想要一个更像{ name: string } | { names: string[] } 的类型。
  • 如果我没看错的话,data.name 是一个Names 对象的数组,每个对象本身都可以是一个名称数组,这似乎是一个奇怪的结构(名称的二维数组)。

标签: javascript typescript object


【解决方案1】:

如果您 100% 确定 names 不会在代码的这一点上未定义,则可以使用以下语法让 Typescript 知道您确定 names 不是 undefined

const name = data[dataLength - 1].hasOwnProperty('name') ? data[dataLength - 1].name : data[dataLength - 1].names![0]

注意最后的!

小心使用! 否则,扩展您的代码以进行更多检查,以让编译器更好地缩小类型或重写某些类型以减少可选属性。

【讨论】:

    猜你喜欢
    • 2019-07-30
    • 2019-09-15
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2021-01-19
    • 2021-01-24
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多