我偶然发现了以下问题,在我看来,Typescript无法捕获类型错误。
说实话,Typescript可能会遗漏一些奇怪的东西,所以我怀疑是我遗漏了一些东西。如果有人可以帮助我理解我,我将不胜感激。
以下代码无法正确使用tsc v3.1.6编译
type Foo = { bar: string };
function test(x: Foo) { console.log(x); }
test({ bar: 'bar', wrong: 'wrong' });
...出现以下错误:
test.ts:3:20 - error TS2345: Argument of type '{ bar: string; wrong:
string; }' is not assignable to parameter of type 'Foo'.
Object literal may only specify known properties, and 'wrong' does
not exist in type 'Foo'.
3 test({ bar: 'bar', wrong: 'wrong' });
~~~~~~~~~~~~~~
但是,以下代码以某种方式可以很好地编译(tsc v3.1.6):
type Foo = { bar: string };
function test(x: Foo) { console.log(x); }
const z = { bar: 'bar', wrong: 'wrong' };
test(z);
我希望第二个代码段失败,并出现与第一个相同的错误。
因此,我只是再次仔细阅读了错误消息,并且确实说到“对象文字可能……”,这意味着该规则仅适用于文字,不适用于局部变量,从而说明了问题。
但是,我仍然想知道为什么该规则也不适用于变量的原因是什么。
阅读评论后,我意识到我的问题与“多余的财产检查”有关。该问题的替代标题可能是:
为什么“多余的属性检查”仅适用于对象文字?