I'm new to TypeScript and it's been a while since I've done any serious JavaScript development, so I may be missing something obvious.
I'm trying to use Moment in an Angular 1 app with TypeScript.
I'm using Angular 1.6.5, Moment 2.17.1 and TypeScript 2.17.1. I have Angular typings installed from the npm @types\\angular
package. Intellisense etc for Angular is working in VS Code.
I've posted the sample code to GitHub here: https://github.com/kevinkuszyk/moment-angular-typescript
My sample app runs in the browser, but the TypeScript compiler complains that it can't find Moment:
app/controller.ts(3,20): error TS2503: Cannot find namespace 'moment'.
app/controller.ts(6,30): error TS2304: Cannot find name 'moment'.
To fix this, I tried adding the following ///
compiler directive:
/// <reference path="../node_modules/moment/moment.d.ts" />
But that doesn't fix the TypeScript compiler:
app/controller.ts(5,20): error TS2503: Cannot find namespace 'moment'.
app/controller.ts(8,30): error TS2304: Cannot find name 'moment'.
Next I tried importing Moment using the instructions from their docs :
import * as moment from 'moment';
But this makes TypeScript generate a different erorr:
app/controller.ts(13,5): error TS2686: 'angular' refers to a UMD global, but the current file is a module. Consider adding an import instead.
I also imported Angular. This fixes TypeScript:
import * as angular from "angular";
But now the app doesn't run in the browser:
Uncaught ReferenceError: require is not defined
at controller.js:2
Finally I tried adding Require.JS, but this just causes a different runtime error:
Uncaught Error: Module name "moment" has not been loaded yet for context: _. Use require([])
http://requirejs.org/docs/errors.html#notloaded
at makeError (require.js:168)
at Object.localRequire [as require] (require.js:1433)
at requirejs (require.js:1794)
at controller.js:2
d.ts
files which are shipped with the main package on npm rather than a separate @types
package? Try explicitly declaring the @types
scoped package to typesRoot in your tsconfig.json
file:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"noImplicitAny": false,
"sourceMap": false,
"typeRoots": [
"./node_modules/@types"
]
}
}
Ensure the type definitions are installed properly in node_modules/@types/...
and that your TypeScript compiler is up to date.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.