Moment.js + TypeScript。找不到名字的时刻

时间:2016-05-21 09:05:41

标签: module typescript momentjs

我在VisualStudio中使用knockout开发Web应用程序。我刚刚通过bower安装了淘汰赛,包括项目中的d.ts文件,包含脚本到html页面,现在我可以访问ko

现在我尝试使用moment.js。与淘汰赛一样:安装,包括d.ts,包括脚本到页面,我收到错误cannot find name 'moment'。添加对d.ts的引用没有帮助,import * as moment from 'moment'收到错误can not find module moment

我知道这是一个愚蠢的问题,但我无法修复它。我做错了什么?

8 个答案:

答案 0 :(得分:7)

在我的情况下,最后通过执行以下操作来解决此错误:

  1. "allowSyntheticDefaultImports": true,文件的compilerOptions部分中添加此选项tsconfig.json已编辑:作为moment doc。sais在注意: If you have trouble importing moment, try add "allowSyntheticDefaultImports": true in compilerOptions in your tsconfig.json file.
  2. 同时在"moduleResolution": "node"部分中添加compilerOptions。 (发现这个选项环顾网络)
  3. import * as moment from 'moment';
  4. 一样导入时刻模块

答案 1 :(得分:6)

我建议使用一些工具来管理您的定义。一些流行的选择(你不需要两者,只需选择一个):

  1. tsd - npm i -g tsd
  2. typings - npm i -g typings
  3. 这些工作方式与包管理器类似。你可以安装你的定义,如npm / bower安装你的依赖项。

    安装其中一个后,转到您的项目并安装时刻+其定义

    npm install moment --save
    

    其中一个:

    tsd install moment --save
    typings install moment --save --ambient
    

    这两个都会创建一个包含你的定义的文件夹(都称之为打字),并且都有一个"伞"其中的定义文件,您应该在应用程序的入口点引用(首先是tsd,第二个是打字):

    /// <reference path="typings/tsd.d.ts" />
    /// <reference path="typings/index.d.ts" />
    

    完成此操作后,您可以使用片刻(或任何其他模块):

    import * as moment from 'moment'
    moment.isDate("I'm not a date")
    

    我建议查看以下内容:

    https://github.com/DefinitelyTyped/tsd
    https://github.com/typings/typings

答案 2 :(得分:6)

我今天有同样的错误。 解决方法是将package.json中的“ moment”包从“ 2.25.0”降级为“ 2.22.1”

我的应用程序是一个有角度的8版本和“打字稿”:“ 3.5.3

答案 3 :(得分:5)

对我来说,错误来自2.25.0版本。 目前的解决方法是降级到2.24.0。

时刻@ 2.25.0-package.json:

"typesVersions": {
    ">=3.1": {
      "*": [
        "ts3.1-typings/*"
      ]
    }
  }

但是文件夹“ ts3.1-typings”不存在。如果您的打字稿版本为3.1或更高版本,则会出现错误:

Cannot find module 'moment'

Github问题:https://github.com/moment/moment/issues/5486

答案 4 :(得分:1)

这似乎解决了我的问题(此线程中的其他解决方案无效):

import * as moment from 'moment/moment.js';

我似乎仍然获得了正确的打字稿定义,甚至直接引用了js文件。我怀疑原因是node_modules下的'moment'文件夹没有index.js文件,但我不是打字稿打字/编译专家。

答案 5 :(得分:0)

尝试添加以下代码,它对我有用

import * as MomentD from "node_modules/moment/moment.d";

答案 6 :(得分:0)

您可以做到:

declare const moment: any;

导入后。

答案 7 :(得分:0)

我已修复它以在 tsconfig.app.json 文件中添加 "allowSyntheticDefaultImports": true 属性并删除 "angularCompilerOptions": { "enableIvy": false}。还在 package.json 中设置了依赖项 "moment": "^2.28.0", "ngx-daterangepicker-material": "4.0.1", "tslib": "^2.0.0",