typescript中函数返回类型的加宽是什么
我在typescript中注意到了这种行为typescript中函数返回类型的加宽是什么,typescript,Typescript,我在typescript中注意到了这种行为 interface Foo { x: () => { x: 'hello' }; } const a: Foo = { x: () => { return { x: 'hello', excess: 3, // no error } }, } 我在github中发现了一些问题,指出这是由于函数返回类型变宽造成的 函数返回类型加宽意味着什么?除非直接为指定类型的引用赋值,否则多余的属性检
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}
,但不会触发过多的属性检查
并不是说这是它应该工作的方式,我已经看到了很多围绕这个问题的问题,当从一个函数中重新调整一个对象文本时,缺少多余的属性检查,理论上,该函数的返回类型由它声明的上下文决定