开发者问题收集

使用变量检查对象是否未定义不起作用 Typescript

2021-10-16
880

我想访问对象中的键,但在这样做之前,我当然需要先检查该对象是否已定义。如果我使用字符串引用该键,则此方法有效,但如果我使用赋值了字符串的变量引用它,则 TypeScript 会大喊大叫:

type Fruit = "apple" | "orange";

type State = {
  [id in string]?: {
      [fruit in Fruit]: {
          status: "ripe" | "rotten";
      };
  };
};

const state: State = {};

const id = "hello";

if (state[id]) {
  state[id].apple.status = "ripe";
  ^^^^^^^^^
  Object is possibly 'undefined'.(2532)
}

if (state["hello"]) {
  // This is perfectly OK
  state["hello"].apple.status = "ripe";
}

为什么会这样?

请参阅 打字稿游乐场

2个回答

您可以使用 ! typescript 忽略了值可能未定义的事实,而您的情况下并非如此

state[hello]!.apple.status = "ripe";
xhxe
2021-10-16

使用其中任何一个,而不是仅使用 state['hello'] 进行检查

  1. !!state['hello']
  2. state['hello'] !== undefined
Mrudula Nudurupati
2021-10-16