Typescript 中可选 props 的解构

Ser*_*nov 3 destructuring typescript

假设我有一个带有这种形状的可选道具的物体

interface MyObject {
  requiredProp: SomeType;
  optionalProp?: { 
    innerData: {
      innerProp1: string;
      innerProp2: number;
      innerProp3?: boolean;
    }
  }
}

const obj:MyObject = { ... }

Run Code Online (Sandbox Code Playgroud)

但似乎我不能轻易地破坏它optionalProp

const {innerProp1, innerProp2, innerProp3} = obj.optionalProp?.innerData;
Run Code Online (Sandbox Code Playgroud)

因为

属性“innerProp1”在类型“...”上不存在 不明确的'。

其余的解构变量也是如此。

有没有一种优雅而简短的方法来保持类型安全?

Mir*_*mba 8

您可以使用空对象作为后备。

const {innerProp1, innerProp2, innerProp3} = obj.optionalProp?.innerData ?? {};
Run Code Online (Sandbox Code Playgroud)

但你应该记住在使用每个innerProp之前检查它是否未定义。