将 Moment 与 Angular 和 TypeScript 结合使用

2024-04-22

我是 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

问题

  1. 我在这里错过了任何明显的事情吗?
  2. 参考的最佳实践是什么d.ts与 npm 上的主包一起提供的文件,而不是单独的文件@types包裹?
  3. 如何在不使用外部模块加载器的情况下完成这项工作?

看起来这是 Moment 的一个已知问题d.ts文件(参见问题#3763 https://github.com/moment/moment/issues/3763, #3808 https://github.com/moment/moment/issues/3808 and #3663 https://github.com/moment/moment/issues/3663).

当我们等待官方修复时,这对我有用。

Change:

export = moment;

to this:

declare module "moment" {
    export = moment;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Moment 与 Angular 和 TypeScript 结合使用 的相关文章

随机推荐

  • Azure Devops Artifacts:禁用从上游源保存包

    我有一个 npm 包的提要 其中 npmjs 设置为上游源 默认情况下 当您尝试使用其他依赖项安装上传的自定义包时 这些依赖项包会自动保存在您的源中 以节省将来安装的时间 然而 我不想要它 并希望我的提要仅托管我自己的软件包 并且每次安装时
  • Android 11 上不再支持发送短信的意图

    当以 Android 11 为目标并使用 Android 11 设备 物理设备或模拟器 时 以下方法不再适用于发送短信 更改目标 SDK 版本或设备 SDK 版本即可使其正常工作 logcat 根本没有说什么 知道为什么它不起作用吗 pri
  • Shopify 应用桥会话令牌在使用 vue.js 和 Axios 时遇到一些问题?

    我在制作 Shopify 应用程序 Vue js 作为前端和 laravel 作为后端时遇到一些问题 我正在使用 app bridge 生成会话令牌 它生成会话令牌正常 并且工作正常 直到重新生成会话令牌 重新生成会话令牌后 它会响应 会话
  • 来自 gluUnProject 的 IllegalArgumentException

    我收到此错误消息 08 30 19 20 17 774 ERROR AndroidRuntime 4681 FATAL EXCEPTION GLThread 9 08 30 19 20 17 774 ERROR AndroidRuntime
  • Swift:以编程方式导航到 ViewController 并传递数据

    我最近开始学习swift 到目前为止还不错 目前 我在尝试在视图控制器之间传递数据时遇到问题 我设法弄清楚如何使用导航控制器以编程方式在两个视图控制器之间导航 唯一的问题是现在我很难弄清楚如何将用户输入的三个字符串 对于 json api
  • 我怎样才能让两个“发展流”(分支?)相互跟踪,同时在特定方面保持不同?

    BRIEF 我想让两个 或更多 开发流 环境相互跟踪 在两个方向上发送彼此之间的更改 而不完全收敛 同时保留某些关键的 本质的差异 细节 一个具体的例子 下面是一个具体的例子 我对我的主目录 glew home 进行版本控制已有 28 年了
  • Angularjs:监听指令中的模型更改

    我试图找出当模型在指令中更新时如何监听 eventEditor directive myAmount function return restrict A link function scope elem attrs scope watch
  • opencv中以下代码行的含义是什么?

    该代码行的含义是什么以及如何将此代码转换为 javacv gray Scalar all 255 这是与此代码行相关的完整代码 Mat src imread in jpg gray cvtColor src gray CV BGR2GRAY
  • 从 iFrame 中卸载/删除内容

    是否有办法卸载已在 iframe 内加载的页面 如果可能的话 我不想将 iframe src 更改为空白页面 我基本上正在寻找可以做这样的事情的东西 frameID attr src 只是该代码似乎没有清除先前加载的页面 有没有 unloa
  • 设置 Let's encrypt with Go - 握手错误

    我正在尝试设置让我们在用 Go 编写的负载均衡器上进行加密 我尝试了自动和手动设置 但总是出错 该域正确指向我们的服务器 Digital Ocean 我什至可以从浏览器打开该网站而不会出现错误 而且 ssl 检查报告该域上没有错误 事实是
  • CSS 动画面临的问题

    我正在尝试创建一个几秒钟后会淡入视图的文本 但我遇到了问题 淡入视图工作正常 但文本在显示后几乎立即消失 其次 我需要这个动画以延迟的方式工作 但是当我设置延迟时 它似乎没有任何区别 早些时候 延迟工作得很好 为什么动画显示后不久就消失了
  • 使用 Spring Security 和 CAS 单点注销

    使用纯 Spring Java 配置 我在让 Spring 和 CAS 执行单点登录时遇到问题 我使用以下配置进行单点登录 我使用一个简单的 JSP 页面对 url 进行表单 POSThttps nginx shane com app lo
  • 线程 1:信号 SIGABRT libc++abi.dylib:以 NSException 类型的未捕获异常终止(lldb)

    我本周开始使用 swift 编程 并尝试在我的应用程序中制作一个简单的导航栏 这不是我第一次遇到这个错误 并且不知道可能缺少什么 如果我没记错的话 我正确地连接了从用户界面到代码的所有内容 但输出显示 libc abi dylib term
  • Chrome 开发者工具 - 浏览器大小?

    我正在使用 Chrome 开发者工具并尝试获取浏览器宽度 以 px 为单位 谷歌最近推出了开发者工具的更新 在这些更新之前 缩放开发者工具时 屏幕高度和宽度通常会出现在网站预览的右上角 但现在无法找出屏幕尺寸 示例如下 现在如何通过 Chr
  • 如何在 CentOS 7 上的 PHP 7.2 上安装 zipArchive?

    我正在尝试在具有最新 WordPress 的 nginx Web 服务器上安装 ziparchive 和 domdocument 为了运行 Avada 主题 我需要在本地 CentOS 7 测试服务器上安装这两个主题 我在过去三天里一直在寻
  • 样式表的条件加载

    我有一个与客户合作的网站 每个客户端都可以有自己的主题 当某个客户端的用户登录时 必须加载公司主题 在 application css scss 中 我为每个公司都有这样一行 import theme x css scss import t
  • 如何获取两个任意变更集之间修改的文件列表?

    我唯一的猜测是这样可怕的事情 files where something has been added hg diff r AA r BB grep cut f1 cut d f2 gt tmp ka files where somethi
  • 在ggplot2中绘制两个面之间的线

    如何在两个面之间绘制多条线 我尝试通过在顶部图表的最小值处绘制点来实现此目的 但它们不在两个方面之间 见下图 到目前为止 这是我的代码 t lt seq 1 1000 y1 lt rexp 1000 y2 lt cumsum y1 z lt
  • Robocopy 将文件复制到远程计算机

    我正在尝试编写一个 robocopy 命令将文件从本地计算机复制到任何一台部署服务器 ROBOCOPY MyService bin release remote computer C services myservice MIR 我收到这个
  • 将 Moment 与 Angular 和 TypeScript 结合使用

    我是 TypeScript 的新手 自从我进行任何认真的 JavaScript 开发以来已经有一段时间了 所以我可能会遗漏一些明显的东西 我正在尝试在带有 TypeScript 的 Angular 1 应用程序中使用 Moment 我正在使