TypeScript 忽略显式未定义类型注释

问题描述 投票:0回答:1

当我在下面为

foo|undefined
指定
myConst
类型时,类型检查正确地告诉我
myConst
在该行上具有
foo|undefined
类型。然而,在下一行中,类型检查表明
myConst
的类型只是
foo
!因此,TypeScript 不需要我使用
?.
运算符访问其字段,并且我可以触发运行时异常。这是为什么呢?有没有办法让 TS 尊重显式添加的
undefined
类型?

type foo = {
  foo?: {
    bar? : {
      text: string
    }
  }
};

const fooArray: foo[] = [{foo: {bar: {text: "hi"}}}];

// type inspection tells me that type is correctly set to "foo|undefined"
const myConst: foo|undefined = fooArray[1];

// myConst type here is just "foo", not "foo|undefined". Where'd the "undefined" go?
// Causes runtime error: Cannot read properties of undefined (reading 'foo') 
const message = myConst.foo?.bar?.text

// never executes
console.log(message);

游乐场链接

typescript undefined typing
1个回答
0
投票

为了不忽略数组中可能未定义的值,请添加

"noUncheckedIndexedAccess": true
,在你的 tsconfig.json 中

文档参考

© www.soinside.com 2019 - 2024. All rights reserved.