类型检查对象变量和对象文字作为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 (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...