Microsoft/TypeScript

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

Open

#60.386 geöffnet am 31. Okt. 2024

Auf GitHub ansehen
 (3 Kommentare) (1 Reaktion) (0 zugewiesene Personen)TypeScript (6.726 Forks)batch import
BugDomain: check: Excess Property CheckingHelp Wanted

Repository-Metriken

Stars
 (48.455 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 6T 17h) (9 gemergte PRs in 30 T)

Beschreibung

🔎 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

Contributor Guide