microsoft/TypeScript

`allowSyntheticImports` should do the emit for synthetic import as well

basarat opened this issue · 5 comments

I just migrated a largish project from Babel to TypeScript. This was the bulk of the changes, i.e. going from import React from "react" to import * as React from "react".

I know that babel definitely did a bad thing by allowing people to use export = as the default import http://stackoverflow.com/a/37152481/390330

however we already support type checking for that with allowSyntheticImports. Why not add the transpile for that as well. Reason being that a lot of JS code is being (even if wrongly) written in import fs from "fs" style (e.g webpack docs : https://gist.github.com/sokra/27b24881210b56bbaff7) and getting to all these people and telling them to stop doing it is no longer a possibility, so if we want a simpler 1-1 JS thats out there to TS migration this would greatly help

🌹

PS : I did a video with allowJs https://www.youtube.com/watch?v=gmKXXI_ck7w Love you guys ❤️

I know that babel definitely did a bad thing by allowing people to use export = as the default import

Actually, I think that this was the right thing. The wrong thing was that both Babel and TypeScript allowed named imports from it. Check out the following discussion: nodejs/node-eps#26 (comment)

Actually, I think that this was the right thing

Thanks. All the more reason to have TypeScript transpile it then 🌹 :)

More : the issue is made worse by the fact that if you do stuff like declare module "foo"; (a new shorthand) then import foo from "foo" will compile fine (irrespective of synthetic import settings) and then you have a runtime error that TypeScript never caught :-/ :cry: :crying_cat_face: :sob: (ノಥ,_」ಥ)ノ彡┻━┻

dumb question..

Does this mean that allowSyntheticDefaultImports is sort of useless until this issue is fixed?

I tried the Babelish import path from 'path' and path is undefined. ✌️

(EDIT: VS Code however is able to provide intellisense for path)

Does this mean that allowSyntheticDefaultImports is sort of useless until this issue is fixed?

No, tools like Babel, Webpack, and SystemJS do this automatically. You'll often use TypeScript in conjunction with one of them.

--esModuleInterop should cover this request.