microsoft / microsoft/TypeScript

Regression Bug: Error "The type of this node cannot be serialized because its property '[fooSymbol]' cannot be serialized." happens but potentially avoidable automatically.

Open
#60,114 2 comments 1 reaction 1 assignee View on GitHub

@weswigham is already working on this.

Since Oct 2, 2024.

Needs Investigation
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

🔎 Search Terms

"symbol", "generics", "serialization", "module", "export", "degression"

🕗 Version & Regression Information

The main behaviour can be categorized in 3 kinds in recent versions. Recommended to read code example first.

⏯ Playground Link

https://www.typescriptlang.org/play/?ssl=1&ssc=1&pln=2&pc=1#code/KYDwDg9gTgLgBAYwgOwM7wGYQgZQJ4C2ARhADZwC8c+xZAFAORYQMCUA3AFCiSxwx4wwOADFsNEuSoChEDHGYSyXbuGjwkaTJTgAeACpxQMYMgAmqOBCIArYAhgA+OhlIBDAOYAuOCTLA3ZFZKRzg6ADcfQwAyOABvOABtAGk4AEtkUXFCSQBdHwBXZABrZAgAd0yAX2CKUISAegAqOFQIAmFSCA80hEsmhrgqrgbBjwBGHwBRKChoKIALYRlhOX4FtMsys2EEQLL4ImFUYCg0t1I0gC9gM197NwKT9JhLMDmhWDw4BkTFHLIuQYiH2EEOx1O50uNzMADo6AAWcbjAAcrFUvA0KHQcAmOgMRhAJnMlmsdgczlqoQwBmcMCgBWAHAx6kQ2PgHgATPjDMZTBYrLZ7E46FSwpE4DF4klUhksrgAaR8nAiqUKtUxQlNDjXJ4dPTGew4M1Wu1Ot1ev1BsNOEA

💻 Code
export const fooSymbol = Symbol('foo');
export type FooSymbol = typeof fooSymbol;

export const f = <T extends object>(flag: boolean) => (v: T & { [K in FooSymbol]: unknown }) => { /* some logics */ };
// g1: Error: The type of this node cannot be serialized because its property '[fooSymbol]' cannot be serialized.(4118)
export const g1 = <T extends object>() => f<T>(true);
export const g2 = <T extends object>() => (v: T & { [K in FooSymbol]: unknown }) => { const flag = true; /* some logics */ };
🙁 Actual behavior

The function g1 seems correctly typed, exported, but error is shown as The type of this node cannot be serialized because its property '[fooSymbol]' cannot be serialized.(4118) by the compiler.
g1 is potentially rewritten in the form of g2, just directly rewrite the given arguments as local constant (or just embed values in all contexts).

🙂 Expected behavior

g1 is acceptable as well as g2.

Additional information about the issue

Generics usage is essential to reproduce this case. I'm not sure if the code example could be minimized.
It's the real case minimization of what I really needed in my projects.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.