Skip to content

False positive on destructured require is verbatimModuleSyntax and module is preserveΒ #63696

Description

πŸ”Ž Search Terms

verbatimModuleSyntax destructure

πŸ•— Version & Regression Information

  • This changed between versions 5.5 and 5.6.

⏯ Playground Link

https://www.typescriptlang.org/play/?moduleResolution=99&target=99&module=199&verbatimModuleSyntax=true&filetype=js#code/PQgEB4CcFMDNpgOwMbVAFwJ4AdoGcBeAIkQHsATaI0YAPgCh7lTE91QBvUGAQ3IDEAlgBs0AX1AFu0AI4BXQTAAUAcjKUAXLDwqAlIwC2FOaIB00AB7ZSkdHknS+Q0fSA

πŸ’» Code

// file.cjs
const { readFile } = require('node:fs')
// tsconfig.json
{
  "compilerOptions": {
    "checkJs": true,
    "module": "preserve",
    "noEmit": true,
    "skipLibCheck": true,
    "target": "esnext",
    "types": ["node"],
    "verbatimModuleSyntax": true,
  }
}

πŸ™ Actual behavior

When verbatimModuleSyntax is enabled and module is set to preserve, TypeScript disallows destructuring of a required module in CommonJS JavaScript.

$ tsc

changed 1 package in 544ms
file.cjs:1:9 - error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'.

1 const { readFile } = require('node:fs')
          ~~~~~~~~


Found 1 error in file.cjs:1

πŸ™‚ Expected behavior

No errors

Additional information about the issue

I could not reproduce this in the playground, because ATA is broken.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: ES ModulesThe issue relates to import/export style module behaviorHelp WantedYou can do this

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions