Javascript 为什么typescript抱怨对象';s键未定义,即使上一个命令为该键设置了值?

Javascript 为什么typescript抱怨对象';s键未定义,即使上一个命令为该键设置了值?,javascript,typescript,undefined,Javascript,Typescript,Undefined,为什么为什么字符串|未定义,因为我在上一行中为条[key]赋值 我怎样才能避免呢 检查示例我知道它为什么会这样 这是因为tsconfig设置为true,默认为false 而const key='carpe'仅在TS编译成JS后执行,因此TS不知道它是哪个键 strictNullChecks:在进行类型检查时,请考虑null和undefined 如果你想解决这个问题,我的两个解决方案是: 1。将tsconfig的stricnullchecks设置为false 2。使用 让我们考虑一下这种情

为什么
为什么
字符串|未定义
,因为我在上一行中为
条[key]
赋值

我怎样才能避免呢


检查示例

我知道它为什么会这样

这是因为tsconfig设置为
true
,默认为false

const key='carpe'
仅在TS编译成JS后执行,因此TS不知道它是哪个键


strictNullChecks:在进行类型检查时,请考虑null和undefined


如果你想解决这个问题,我的两个解决方案是:

1。将
tsconfig
stricnullchecks
设置为
false

2。使用


让我们考虑一下这种情况:

const why = bar[key]!;

如果将
stricnullchecks
设置为false,
why
将始终是字符串类型

为什么我无法获取类型
string |未定义
,我的
why
是“string”类型@zixiCat不知道。当我将鼠标悬停在why上时,我的IDE显示它是字符串|未定义,请检查我刚刚上传的附加图像。我要让它使用
在最后,但你能详细说明一下吗?我的意思是为什么
null
undefined
之间的区别会导致这样的问题,因为我明确声明它是
string | undefined
而不是
string | null | undefined
,它们之间没有区别,<代码> > StrutnultChests< /Cult>如果它包含空的或未定义的对象,则只考虑它的类型,如果你设置了一个空的或未定义的,如果你设置了一个对象:“代码”网站近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日近日,UUUUUUUUUUUUUUUUUUUUUUUU将将将将将将将将将将将将将将将将将将将将将将将将将将将将将UUUUUUUUUUUUUUUU;未定义|空
const why = bar[key]!;
let key = 'carpe';
bar[key] = 'diem';
// the next line would only be executed after the TS is compiled into JS.
key = 'test';  
// that is to say TS does not know the key is 'test' or 'carpe'
// so `why` is type of string or undefined

const why = bar[key];