Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot call a namespace ('moment') #221

Closed
sishuoyang opened this issue Oct 16, 2017 · 17 comments
Closed

Cannot call a namespace ('moment') #221

sishuoyang opened this issue Oct 16, 2017 · 17 comments

Comments

@sishuoyang
Copy link

My library uses moment import * as moment from 'moment'.

When I run gulp compile I hit this error.
Error: Cannot call a namespace ('moment') at error (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:185:14) at Module.error (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:8170:3) at CallExpression.bind (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:6324:17) at eachChild.child (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5674:34) at keys.forEach.key (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5685:5) at Array.forEach (native) at ConditionalExpression.eachChild (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5678:13) at ConditionalExpression.bind (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5674:8) at eachChild.child (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5674:34) at keys.forEach.key (C:\SourceCodeNew\IndConsoleSvcProxy\node_modules\rollup\dist\rollup.js:5685:5)

This SO post suggesting change the import to import moment from 'moment' but it doesn't work for me because I hit another error Module '"C:/SourceCodeNew/IndConsoleSvcProxy/node_modules/moment/moment"' has no default export.

@sishuoyang
Copy link
Author

Need to add this to tsconfig.es5.json "allowSyntheticDefaultImports": true

@Ismaestro
Copy link

Same problem, @sheldonyss that does not works!

@Ismaestro
Copy link

My workarround:

import * as moment_ from 'moment';

const moment = moment_;

:)

@dave0688
Copy link

Wow, thanks @Ismaestro.
Really wondering how you found that out... :D

@Ismaestro
Copy link

From here. ;)

@logic01
Copy link

logic01 commented May 8, 2018

With Angular 6 this workaround no longer works. Why is moment such a pain in the butt to work with in Angular applications!

import * as moment_ from 'moment';
const moment = moment_;

Cannot call a namespace ('moment_')
Error: Cannot call a namespace ('moment_')

edit: I retract my statement. After testing in a fresh project everything worked fine.

@Ismaestro
Copy link

Hi @logic01 , for me it's working with v6, here. What versions are you using? (ng -v)

screen shot 2018-05-08 at 18 40 21

@logic01
Copy link

logic01 commented May 9, 2018

You are correct, it does appear to work. After testing in a fresh Angular 6 project + Library project everything worked fine. I must have made a mistake in my upgraded project.

It still seems like moment is the odd man out when it comes to importing but at least it's working. Moment is such a useful library.

@Ismaestro
Copy link

👍 Yes moment save my days when I have to work with dates...

@jvandemo
Copy link
Owner

jvandemo commented May 9, 2018

@Ismaestro @logic01 — Thank you for the update 👍

@KissBalazs
Copy link

This workaround worked for us with Angular 6, but now broken again in Angular 7.

@alsoicode
Copy link

I'm having the same issue as @KissBalazs with Angular 7

@westandy-dcp
Copy link

this same issue pops up with import * as format from 'date-fns/format'; and the solution is the same:

import * as format_ from 'date-fns/format';
const format = format_;

What is special about moment and date-fns that typescript chokes like this? Like someone said earlier, I thought TS was a superset of JS?

@tanzeelrana
Copy link

tanzeelrana commented Jul 30, 2019

import * as moment_ from "moment";

const moment = moment_;

works for me on a fresh build for an angular 7 project

@will-wow
Copy link

will-wow commented Aug 11, 2019

FWIW, I ran into a similar problem, and solved it by adding

"esModuleInterop": true,

to my tsconfig.json. That lets you just import library from "library" from CommonJS libraries, instead of import * as library from 'library', and seems to be a little more forgiving to libraries that otherwise give Typescript trouble

@hlpupo
Copy link

hlpupo commented Aug 15, 2019

My workarround:

import * as moment_ from 'moment';

const moment = moment_;

:)

thank you so much, awesome solution

@frynsen1986
Copy link

On a project I'm working on we had luck importing 'moment' like this:
import moment, {Moment} from 'moment';

Tests run fine, and the command ng build <project> builds fine.

The setup we're working in is as follows:

  • Angular: 8.2.13
  • Typescript: 3.5.3
  • moment: 2.24.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests