I am trying to get moment
to work in my angular
application. Here is a clean sample repo to demonstrate the issue. Clone that repo and run ng build test-library
in the root directory. Install packages first, npm install
.
When i try to use moment
, i am getting the following error. What am i doing wrong? I have been trying to fix this for a while now. I have googled it many times and tried several suggestions to no avail.
Usage:
import * as moment from 'moment';
...
public doSomething(): string {
const aMoment: moment.Moment = moment(); // line 22
return aMoment.format();
}
Error:
projects/test-library/src/lib/test-library.component.ts(22,36): error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'typeof moment' has no compatible call signatures.
tsconfig.json
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"outDir": "../../out-tsc/lib",
"target": "es2015",
"module": "es2015",
"moduleResolution": "node",
"declaration": true,
"sourceMap": true,
"inlineSources": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"fullTemplateTypeCheck": true,
"strictInjectionParameters": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}
I had the same problem. And I solved the issue in two ways.
1)I set the value of esModuleInterop false under compilerOptions
"esModuleInterop": false
import * as _moment from 'moment';
to the following code
import _moment from "moment";
both options worked fine for my code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With