microsoft / microsoft/TypeScript

Shouldn't TypeScript be able to polyfill `import defer` with `Proxy` to work with `"module": "commonjs"`?

Open
#62,031 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Awaiting More Feedback Suggestion
Dominant language
Go
Stars
111k
Forks
14.3k
Avg merge
2d 4h
Merged PRs (30d)
132

Description

🔍 Search Terms

import defer commonjs
import defer require

✅ Viability Checklist
⭐ Suggestion

Since the TypeScript beta announcement, I tried it in the playground. But setting "module" to "commonjs" sadly revealed that import defer only work with "module": "esnext" or "module": "preserve".

But Proxy can polyfill this exact behavior.

📃 Motivating Example

This code:

import defer * as MyModule from 'my-module'

should output something like this:

let _module
const MyModule = new Proxy({}, {
  get(_target, prop) {
    if (!_module) {
      _module = require('my-module') // the real code would obviously more complicated as it needs to force `_module` to be an object
    }
    return _module[prop]
  }
})
💻 Use Cases
  1. What do you want to use this for? Using import defer for legacy targets
  2. What shortcomings exist with current approaches? await import forces Promise
  3. What workarounds are you using in the meantime? await import

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.

Research direction

Start by tracing how TypeScript handles import defer when module is commonjs, and compare that with the existing esnext and preserve behavior. Use the motivating Proxy example and the stated legacy-target use case to define the expected output, then add coverage showing whether synchronous deferred access works without introducing Promise.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, typescript
Domain
compilers
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
28/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.