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
typescript中函数返回类型的加宽是什么_Typescript - Fatal编程技术网

typescript中函数返回类型的加宽是什么

typescript中函数返回类型的加宽是什么,typescript,Typescript,我在typescript中注意到了这种行为 interface Foo { x: () => { x: 'hello' }; } const a: Foo = { x: () => { return { x: 'hello', excess: 3, // no error } }, } 我在github中发现了一些问题,指出这是由于函数返回类型变宽造成的 函数返回类型加宽意味着什么?除非直接为指定类型的引用赋值,否则多余的属性检

我在typescript中注意到了这种行为

interface Foo {
  x: () => { x: 'hello' };
}

const a: Foo = {
  x: () => {
    return {
      x: 'hello',
      excess: 3, // no error
    }
  },
}
我在github中发现了一些问题,指出这是由于函数返回类型变宽造成的


函数返回类型加宽意味着什么?

除非直接为指定类型的引用赋值,否则多余的属性检查不会生效。因此,除非直接将对象文字指定给显式类型化的参数、变量或返回,否则不会出现错误

在这种情况下,
x
函数是作为确定外部对象文本类型的一部分独立键入的,其返回类型被确定为
{x:'hello',exterx:3}
。然后检查该功能是否与
Foo
中的
x
兼容,并发现该功能兼容。在任何情况下,都没有将对象文本直接赋值给显式类型的引用。因此不会触发额外的财产检查

您在问题中发现的加宽不会影响此处没有错误。编译器使用上下文类型来确定某些类型。因此,例如,它将使用外部对象文本分配给
Foo
引用作为上下文,这将有助于确定参数类型,例如,它将停止将
{x:“hello”}
扩展到
{x:string}
,但不会触发过多的属性检查

并不是说这是它应该工作的方式,我已经看到了很多围绕这个问题的问题,当从一个函数中重新调整一个对象文本时,缺少多余的属性检查,理论上,该函数的返回类型由它声明的上下文决定