Skip to content

Spurious TS2351 with NodeNext + default import across package boundaries + non-module package.{json,json5,yaml} in parent directory #63251

@monsanto

Description

@monsanto

🔎 Search Terms

nodenext, ts2351, construct

🕗 Version & Regression Information

  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about "A default import of a commonjs module with a default in a esm file doesn't seem to be the default export of that module when module is node16 or nodenext".

⏯ Playground Link

N/A

💻 Code

git clone https://github.com/monsanto/typescript-nodenext-bug
cd typescript-nodenext-bug
npm install
npm run tsc

🙁 Actual behavior

foo/index.ts:6:5 - error TS2351: This expression is not constructable.
  Type 'typeof import("<dir>/typescript-nodenext-bug/.cache/foolib/class")' has no construct signatures.

6 new CBad();
      ~~~~


Found 1 error.

🙂 Expected behavior

It succeeds.

Additional information about the issue

  • This issue requires a composite project, NodeNext, a package boundary, a default export, and a parent directory with a file package.{json, json5, yaml} without type: module.
    • Please note that import default inside foo's package boundary works.
    • One can delete the provided package.json after installing and run node_modules/typescript/bin/tsc --build tsconfig-base.json to test without package.json present.
    • One can see other package extensions trigger the bug by mv package.json package.yaml and pnpm run tsc.
  • This is not a CommonJS project. It doesn't matter that there is a parent package.json without it. Node doesn't even read package.yaml.
    • This is from a real-world monorepo where there is a root pnpm package.json5 for cross-package scripts.

Cross-ref for #62200

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions