Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Arrays 为什么typescript假定数组元素查找赢了';不能是未定义的吗?_Arrays_Typescript - Fatal编程技术网

Arrays 为什么typescript假定数组元素查找赢了';不能是未定义的吗?

Arrays 为什么typescript假定数组元素查找赢了';不能是未定义的吗?,arrays,typescript,Arrays,Typescript,我很惊讶,这个类型脚本不会导致类型错误(也可以在中找到): class-Foo{ 构造函数(只读x:number,只读y:number){} } const xOfFirstFoo=(arr:Array):number=>{ 返回arr[0].x } const result=xOfFirstFoo([]); //上述行的结果是: //[错误]:“执行的JavaScript失败:” //[错误]:无法读取未定义的属性“x” 天真地说,我希望打字机知道arr[0](或者更一般地说,任何arr[I

我很惊讶,这个类型脚本不会导致类型错误(也可以在中找到):

class-Foo{
构造函数(只读x:number,只读y:number){}
}
const xOfFirstFoo=(arr:Array):number=>{
返回arr[0].x
}
const result=xOfFirstFoo([]);
//上述行的结果是:
//[错误]:“执行的JavaScript失败:”
//[错误]:无法读取未定义的属性“x”
天真地说,我希望打字机知道
arr[0]
(或者更一般地说,任何
arr[I]
)可能是
Foo
未定义的
,因此不能保证
.x
属性可用


这里发生了什么?

来自@jornsharpe和@shinigami的评论帮助我理解了这一点!释义:


  • 数组基本上是
    {[index:number]:T}
    ,其中假定
    索引
    的每个值都有一个定义的
    T
    值。如果需要特定的长度,可以使用

  • 但是有了这个标志(将包含在TypeScript 4.1中),行为将符合我最初的期望。特别是:

  • 在这种新模式下,每个属性访问(如foo.bar)或索引访问(如foo[“bar”])都可能被认为是未定义的


    来自@jornsharpe和@shinigami的评论帮助我理解了这一点!释义:


  • 数组基本上是
    {[index:number]:T}
    ,其中假定
    索引
    的每个值都有一个定义的
    T
    值。如果需要特定的长度,可以使用

  • 但是有了这个标志(将包含在TypeScript 4.1中),行为将符合我最初的期望。特别是:

  • 在这种新模式下,每个属性访问(如foo.bar)或索引访问(如foo[“bar”])都可能被认为是未定义的


    数组基本上是
    {[index:number]:T}
    ;假设每个索引都是定义的,它们没有任何长度信息(这是一个值,不是类型)。如果你只期望一件事,你可以使用一个。但这项功能将与TS 4一起发布。1@Shinigami我对这面旗帜一无所知。谢谢你,伙计!数组基本上是
    {[index:number]:T}
    ;假设每个索引都是定义的,它们没有任何长度信息(这是一个值,不是类型)。如果你只期望一件事,你可以使用一个。但这项功能将与TS 4一起发布。1@Shinigami我对这面旗帜一无所知。谢谢你,伙计!