gpt4 book ai didi

typescript 函数类型没有强制执行与返回类型相同的严格性

转载 作者:行者123 更新时间:2023-12-04 12:23:56 24 4
gpt4 key购买 nike

我试图定义一个具有返回类型 (Object) 的函数类型,以强制实现它的函数返回在返回类型中定义的确切对象属性。
然而,编译器对返回的对象并不严格,并允许在返回的对象类型中未定义的额外属性。

interface Obj {
foo: string;
}

type Func = () => Obj;

const fn: Func = () => {
return {
foo: 'bar',
blah: '', // compiler does not show an error
};
};
Example in TS playground
相反,如果返回类型 Objfn 中指定函数,编译器显示错误。
interface Obj {
foo: string;
}

const fn = (): Obj => {
return {
foo: 'bar',
blah: '', // compiler shows an error
};
};
Example in TS playground
有人可以解释为什么 TS 以不同的方式处理这些情况吗?
有没有办法在使用函数类型时具有返回类型的严格性?

最佳答案

在第一个例子中,匿名函数的返回类型动态定义如下:{ foo: string; blah: string; } .此类型与类型 Obj 兼容因为它具有 Obj 的所有必需属性(还有更多,但这足以被认为是兼容的,因为“结构类型是一种仅基于其成员关联类型的方式”,来自 https://www.typescriptlang.org/docs/handbook/type-compatibility.html )。
最后,Func type 与匿名函数的静默定义类型兼容 () => { foo: string; blah: string; } ,因此会发生“隐式转换”并进行编译。
在第二个示例中,签名强制执行匿名函数本身的返回类型,因此返回的对象是一个应该完全属于 Obj 类型的文字。 .因此,出于同样的原因,您不能这样做:let obj: Obj = { foo:'bar', blah:'' } ,此代码无法编译,因为在这种情况下没有兼容性检查,因为它的类型是明确定义的。
干杯!

关于 typescript 函数类型没有强制执行与返回类型相同的严格性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62944997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com