Title: Design Meeting Notes, 1/13/2023 · Issue #52229 · microsoft/TypeScript · GitHub
Open Graph Title: Design Meeting Notes, 1/13/2023 · Issue #52229 · microsoft/TypeScript
X Title: Design Meeting Notes, 1/13/2023 · Issue #52229 · microsoft/TypeScript
Description: Module-Format-Indicating Files Under Certain --module Targets #50647 We added .mts and .cts to the list of extensions we recognize. They have a pretty straightforward meaning - ESM and CJS that emit to .mjs and .cjs respectively. Other m...
Open Graph Description: Module-Format-Indicating Files Under Certain --module Targets #50647 We added .mts and .cts to the list of extensions we recognize. They have a pretty straightforward meaning - ESM and CJS that emi...
X Description: Module-Format-Indicating Files Under Certain --module Targets #50647 We added .mts and .cts to the list of extensions we recognize. They have a pretty straightforward meaning - ESM and CJS that emi...
Opengraph URL: https://github.com/microsoft/TypeScript/issues/52229
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Design Meeting Notes, 1/13/2023","articleBody":"# Module-Format-Indicating Files Under Certain `--module` Targets\r\n\r\nhttps://github.com/microsoft/TypeScript/issues/50647\r\n\r\n* We added `.mts` and `.cts` to the list of extensions we recognize.\r\n * They have a pretty straightforward meaning - ESM and CJS that emit to `.mjs` and `.cjs` respectively.\r\n* Other module resolution modes don't know that these files modes are special.\r\n * But they don't choke on them - they don't treat them specially.\r\n * That's good - opening a random `.mts` file in an editor shouldn't cause us to choke.\r\n * But you can get contradictory outputs.\r\n* Issue uses these files with `--module esnext`\r\n * Implies everything is ESM.\r\n * But that means that `.cts` is interpreted as ESM\r\n* Two options\r\n * Could make it a program-level error.\r\n * Could allow the file extension to dictate emit options.\r\n * `--module esnext` + `.cts` would emit to `.cjs` with CJS constructs.\r\n* Why not use `nodenext`?\r\n * Confusing errors due to misconfigured packages.\r\n* Could take the position that these aren't allowed in the program with these settings.\r\n * Has benefits like \"hey you are accidentally including a CJS file in your ESM program\"\r\n * But it's a break.\r\n * Also, what is the default behavior for the editor? It needs a default set of options.\r\n * Maybe there's something here with `noEmit`?\r\n* What are our recommendations to users?\r\n * What is the matrix of meaningful settings?\r\n * Even if you have the matrix, what do you do in the \"no man's land\" cases? That's part of what's being discussed here.\r\n* Aside - our docs on these are confusing.\r\n * Why do we need all these intermediate `esABCD` module modes?\r\n* What's `esnext` vs `nodenext`?\r\n * `esnext` = ESM imports and exports\r\n * `nodenext` = depends on `package.json` `type` field and file extension.\r\n* What if you just said \"use `--moduleResolution bundler`\" to these users?\r\n * Well what is the `--module` option there?\r\n * `esnext`?\r\n * Well then what do you do with that `.cts`/`.cjs` file?\r\n * What about `--module nodenext` + `bundler`?\r\n * Well that seems okay - but it would be good if the file extension could override the resolution strategy.\r\n* Aside: `verbatimModuleSyntax` avoids many of these concerns. It removes the overhead of the emit target because what you see is roughly what you get.\r\n* Haven't heard any objections to the idea that file extensions should be able to override the emit target or resolution target.\r\n * But does it make sense to emit an error?\r\n * Why? This emits correctly. What is the problem with it?\r\n* What's our next step?\r\n * We feel comfortable making file extension override the emit target.\r\n * `--module` would only toggle the emit settings for `.ts` and `.tsx` files.\r\n * Feels more controlled.\r\n* Really want to be able to come up with a simpler story here.\r\n * We'd like to revisit this with docs.\r\n * Before RC.\r\n ","author":{"url":"https://github.com/DanielRosenwasser","@type":"Person","name":"DanielRosenwasser"},"datePublished":"2023-01-13T20:51:38.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/52229/TypeScript/issues/52229"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:9db2498d-ba1b-a049-de1a-e700b370fc03 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | CE84:1AF5CD:124600E:1881F1C:6A5B7AB6 |
| html-safe-nonce | af2e936e546c1d8e3aca1adda3a92290ca4801d3f64b6be344934dede43edca0 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDRTg0OjFBRjVDRDoxMjQ2MDBFOjE4ODFGMUM6NkE1QjdBQjYiLCJ2aXNpdG9yX2lkIjoiNTA4NTgxMDYzODI5MzAwNzAzMCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 7a4a475b6bec629502966d273515aa3601e82cacae39777f9be87b0be9975dc0 |
| hovercard-subject-tag | issue:1532899291 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/microsoft/TypeScript/52229/issue_layout |
| twitter:image | https://opengraph.githubassets.com/cf272ba446507e8b07ff7ae99be1701286b86abb1dc8ae9928f3e5e5dc91a1c3/microsoft/TypeScript/issues/52229 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/cf272ba446507e8b07ff7ae99be1701286b86abb1dc8ae9928f3e5e5dc91a1c3/microsoft/TypeScript/issues/52229 |
| og:image:alt | Module-Format-Indicating Files Under Certain --module Targets #50647 We added .mts and .cts to the list of extensions we recognize. They have a pretty straightforward meaning - ESM and CJS that emi... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | DanielRosenwasser |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b |
| turbo-cache-control | no-preview |
| go-import | github.com/microsoft/TypeScript git https://github.com/microsoft/TypeScript.git |
| octolytics-dimension-user_id | 6154722 |
| octolytics-dimension-user_login | microsoft |
| octolytics-dimension-repository_id | 20929025 |
| octolytics-dimension-repository_nwo | microsoft/TypeScript |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 20929025 |
| octolytics-dimension-repository_network_root_nwo | microsoft/TypeScript |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9c975978430e9ad293956f2bbdaf153b1bd84a99 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width