类型检查对象变量和对象文字作为Typescript中的函数参数的类型差异

问题描述

代码沙箱: https://codesandbox.io/s/staging-tree-i8uem?file=/src/index.ts

我有一个函数,可以接受某种类型的对象参数。

interface MY_INTERFACE {
  PROP_A: string;                  // IN MY REAL CASE,THESE ARE NOT STRINGS
  PROP_B: string;
  PROP_C: string;
  PROP_D: string;
}

type OBJECT_ParaM_TYPE = {
  [key in keyof MY_INTERFACE]: string;
};

对象类型OBJECT_ParaM_TYPE必须具有MY_INTERFACE中存在的所有属性以及一个字符串作为值。

我正在测试的功能

function someFunction(x: OBJECT_ParaM_TYPE): OBJECT_ParaM_TYPE {
  return x;
}

将对象作为变量或对象文字传递时,得到的结果不同。

测试1

传递具有附加属性PROP_E的对象。

enter image description here

测试1-结果

将对象作为变量传递的代码result1不会触发任何错误

只有传递对象文字代码result2会触发Extra属性错误

那是为什么?

测试2

传递缺少属性PROP_D的对象。

enter image description here

测试2-结果

两个代码显示缺少属性PROP_D错误,这是该测试的预期行为。


问题

当我在 TEST 1 TEST 1中将变量作为变量传递给对象时,为什么Typescript不会触发Extra属性错误

代码沙箱: https://codesandbox.io/s/staging-tree-i8uem?file=/src/index.ts

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)