CodeSandbox: https://codesandbox.io/s/staging-tree-i8uem?file=/src/index.ts
I have a function that takes an object param of a certain type.
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;
};
The object type OBJECT_PARAM_TYPE must have all the properties that are present in MY_INTERFACE and a string as a value.
The function I'm testing it with:
function someFunction(x: OBJECT_PARAM_TYPE): OBJECT_PARAM_TYPE {
  return x;
}
I'm getting different results when I'm passing the object as a variable, or an object literal.
TEST 1
Passing an object with an extra property PROP_E.
TEST 1 - Result
The code result1 that passses the object as a variable, does not trigger any errors.
Only the code result2 that passes the object literal is triggering the error for the extra property.
Why is that?
TEST 2
Passing an object with a missing property PROP_D.
TEST 2 - Result
Both codes show errors for the missing property PROP_D, which was the expected behavior for this test.
QUESTION
Why Typescript will not trigger the error for the extra property when I'm passing the object as a variable in TEST 1 ?
CodeSandbox: https://codesandbox.io/s/staging-tree-i8uem?file=/src/index.ts

