我是 TypeScript 的新手,自从我进行任何认真的 JavaScript 开发以来已经有一段时间了,所以我可能会遗漏一些明显的东西。
我正在尝试在带有 TypeScript 的 Angular 1 应用程序中使用 Moment。
我正在使用 Angular 1.6.5、Moment 2.17.1 和 TypeScript 2.17.1。我从 npm 安装了 Angular 类型@types\angular
包裹。 Angular 的 Intellisense 等正在 VS Code 中运行。
我已将示例代码发布到 GitHub:https://github.com/kevinkuszyk/moment-angular-typescript https://github.com/kevinkuszyk/moment-angular-typescript
第一个错误
我的示例应用程序在浏览器中运行,但 TypeScript 编译器抱怨它找不到 Moment:
app/controller.ts(3,20): error TS2503: Cannot find namespace 'moment'.
app/controller.ts(6,30): error TS2304: Cannot find name 'moment'.
尝试使用 /// 编译器指令
为了解决这个问题,我尝试添加以下内容///
编译器指令:
/// <reference path="../node_modules/moment/moment.d.ts" />
但这并不能解决 TypeScript 编译器的问题:
app/controller.ts(5,20): error TS2503: Cannot find namespace 'moment'.
app/controller.ts(8,30): error TS2304: Cannot find name 'moment'.
导入时刻
接下来我尝试使用他们的说明导入 Momentdocs http://momentjs.com/docs/#/use-it/typescript/:
import * as moment from 'moment';
但这使得 TypeScript 生成不同的错误:
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.
导入角度
我还导入了 Angular。这修复了 TypeScript:
import * as angular from "angular";
但现在该应用程序无法在浏览器中运行:
Uncaught ReferenceError: require is not defined
at controller.js:2
使用 Require.JS
最后我尝试添加 Require.JS,但这只会导致不同的运行时错误:
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
与 npm 上的主包一起提供的文件,而不是单独的文件@types
包裹?
- 如何在不使用外部模块加载器的情况下完成这项工作?