Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t TypeScript是否坚持某些数组[0]可以未定义?_Typescript - Fatal编程技术网

为什么';t TypeScript是否坚持某些数组[0]可以未定义?

为什么';t TypeScript是否坚持某些数组[0]可以未定义?,typescript,Typescript,我班上有两位能手: get jobs():Job[] { 返回Object.values(this.#jobs); } 获取作业():作业 { 返回此。作业[0]; } 为什么TypeScript 4.2.3不抱怨这个.jobs[0]可以未定义?它允许我从第二个getter以Job的形式返回它,但是get jobs()返回的数组决不能保证非空。配置值将把未定义的添加到索引访问返回的类型。配置值将把未定义的添加到索引访问返回的类型。,现在看来,让它停止抱怨是非常困难的。在if(key-in-in

我班上有两位能手:

get jobs():Job[]
{
返回Object.values(this.#jobs);
}
获取作业():作业
{
返回此。作业[0];
}

为什么TypeScript 4.2.3不抱怨
这个.jobs[0]
可以
未定义
?它允许我从第二个getter以
Job
的形式返回它,但是
get jobs()返回的数组
决不能保证非空。

配置值将把
未定义的
添加到索引访问返回的类型。

配置值将把
未定义的
添加到索引访问返回的类型。

,现在看来,让它停止抱怨是非常困难的。在
if(key-in-index){index[key].foo();}
这样的情况下,它仍然会抱怨,也就是说,我显式地运行时检查键是否在对象中,但它仍然会抱怨(并且对象是
Record
,因此它不能有一个未定义的under-key)。在这种情况下,您可以安全地断言类型,例如,添加
if(key-in-index){index[key].foo()作为SomeType;}
您的意思是
(索引[key]作为SomeType).foo()
?我可以这样做,但我相信我不应该这样做。相反,你可以这样做:
const item=index[key];如果(item){item.foo()}
Yes,那就是我最后要做的。我的理论是,TS将所有这些操作(
key-in-obj
obj[key]
)视为潜在的可重写操作,以使对象发生变异,因此它甚至拒绝假设
key
key-in-obj
被暂时视为正确后仍在
obj
中。但是如果你真的选择了这个值并直接测试它,那么它就知道这个值在测试和使用之间是不会改变的。嗯,现在看来让它停止抱怨是非常困难的。在
if(key-in-index){index[key].foo();}
这样的情况下,它仍然会抱怨,也就是说,我显式地运行时检查键是否在对象中,但它仍然会抱怨(并且对象是
Record
,因此它不能有一个未定义的under-key)。在这种情况下,您可以安全地断言类型,例如,添加
if(key-in-index){index[key].foo()作为SomeType;}
您的意思是
(索引[key]作为SomeType).foo()
?我可以这样做,但我相信我不应该这样做。相反,你可以这样做:
const item=index[key];如果(item){item.foo()}
Yes,那就是我最后要做的。我的理论是,TS将所有这些操作(
key-in-obj
obj[key]
)视为潜在的可重写操作,以使对象发生变异,因此它甚至拒绝假设
key
key-in-obj
被暂时视为正确后仍在
obj
中。但是如果你真的选择了这个值并直接测试它,那么它就知道这个值在测试和使用之间是不会改变的。