Microsoft/TypeScript

Destructuring into an empty object vs an object with existing properties yields different results

Open

#60,386 opened on 2024幎10月31日

GitHub で芋る
 (3 comments) (1 reaction) (0 assignees)TypeScript (6,726 forks)batch import
BugDomain: check: Excess Property CheckingHelp Wanted

Repository metrics

Stars
 (48,455 stars)
PR merge metrics
 (平均マヌゞ 6d 17h) (30d で 9 merged PRs)

説明

🔎 Search Terms

"destructuring", "record"

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ.

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.6.3#code/MYewdgzgLgBATgU1HAJgdQJZQBYGUpwZgDmEAXDAEpIioA80hJANDI0cQHwwC8MA3gF8A3AChRCAB4AHWrFCRYiZOizYAcgFcAtgCMEcclRr12LGGB3643Pv1EwYUggEMACnBDSDUAJ4UABmYHGAA6cOVaVRx8JlJgkSA

💻 Code

This raises a type error:

const recordWithStrings: Record<string, string> = {};

export const recordWithNumbers: Record<string, number> = {
  ...recordWithStrings,
};

and this doesn't:

const recordWithStrings: Record<string, string> = {};

export const recordWithNumbers: Record<string, number> = {
  extraProperty: 0,
  ...recordWithStrings,
};

Is there a sound reason for that?

🙁 Actual behavior

The 2nd example doesn't raise a type error.

🙂 Expected behavior

The 2nd example should raise a type error.

Additional information about the issue

No response

コントリビュヌタヌガむド