如何moment.js以打字稿进口?如何moment.js以打字稿进口?(How can momen

2019-05-12 03:39发布

我想学打字原稿。 虽然我不认为这是相关的,我使用VSCode这个演示。

我有一个package.json ,在它具有以下部分:

{
  "devDependencies": {
    "gulp": "^3.9.1",
    "jspm": "^0.16.33",
    "typescript": "^1.8.10"
  },
  "jspm": {
    "moment": "npm:moment@^2.12.0"
  }
}

然后,我有一个打字稿类main.js是这样的:

import moment from 'moment';
export class Main {
}

gulpfile.js看起来是这样的:

var gulp = require('gulp');
var typescript = require('gulp-tsb');
var compilerOptions = {
                        "rootDir": "src/",
                        "sourceMap": true,
                        "target": "es5",
                        "module": "amd",
                        "declaration": false,
                        "noImplicitAny": false,
                        "noResolve": true,
                        "removeComments": true,
                        "noLib": false,
                        "emitDecoratorMetadata": true,
                        "experimentalDecorators": true
                      };
var typescriptCompiler = typescript.create(compilerOptions);
gulp.task('build', function() {
  return gulp.src('/src')
    .pipe(typescriptCompiler())
    .pipe(gulp.dest('/dest'));
});

当我运行一饮而尽构建,我得到的消息: "../main.ts(1,25): Cannot file module 'moment'."

如果我使用import moment = require('moment'); 然后JSPM会工作,并在模块中带来的,当我运行应用程序,但我仍然收到生成错误。 我也尝试:

npm install typings -g
typings install moment --ambient --save

而不是使问题虽然比较好,它变得更糟。 现在,我得到的构建上面的错误,以及以下内容: "../typings/browser/ambient/moment/index.d.ts(9,21): Cannot find namespace 'moment'."

如果我去的分型和提供的文件添加到文件底部:

declare module "moment" { export = moment; }

我可以得到第二个错误去了,但我仍然需要在需要语句获取时刻在我的工作main.ts文件和我仍然得到第一生成错误。

我是否需要创建自己的.d.ts文件一刻还是有只是一些设置一块我失踪?

Answer 1:

更新

显然,此刻现在提供了自己的类型定义(根据sivabudh至少从2.14.1以上),因此你不需要typings@types的。

import * as moment from 'moment'应该加载带有故宫包的类型定义。

但尽管如此,在该时刻/拉/ 3319#issuecomment-263752265此刻球队似乎都在维护这些定义的一些问题(他们仍然在寻找的人谁维护他们)。


您需要安装moment没有分型--ambient标志。

然后包括它使用import * as moment from 'moment'



Answer 2:

您需要在TS分别导入时刻()的函数和类。

我发现了打字稿文档的说明这里 。

/ *〜注意ES6模块不能直接出口可调用的函数。 *〜这个文件应该使用CommonJS的风格导入:*〜进口X =需要( 'someLibrary');

因此,代码导入时刻JS为打字稿实际上看起来是这样的:

import { Moment } from 'moment'
....
let moment = require('moment');
...
interface SomeTime {
  aMoment: Moment,
}
...
fn() {
  ...
  someTime.aMoment = moment(...);
  ...
}


Answer 3:

通过分型

Moment.js现在支持打字稿在v2.14.1。

请参阅: https://github.com/moment/moment/pull/3280


可能不是最好的答案,但这是蛮力方式,它为我工作。

  1. 只要下载实际moment.js文件,并将其包含在您的项目。
  2. 例如,我的项目是这样的:

$ tree . ├── main.js ├── main.js.map ├── main.ts └── moment.js

  1. 下面是一个示例源代码:

```

import * as moment from 'moment';

class HelloWorld {
    public hello(input:string):string {
        if (input === '') {
            return "Hello, World!";
        }
        else {
            return "Hello, " + input + "!";
        }
    }
}

let h = new HelloWorld();
console.log(moment().format('YYYY-MM-DD HH:mm:ss'));
  1. 只需使用node运行main.js


Answer 4:

不知道什么时候该改变了,但打字稿的最新版本,你只需要使用import moment from 'moment'; 和其他一切应该工作正常。

更新:

貌似最近时刻固定其进口。 由于至少2.24.0你需要使用import * as moment from 'moment';



Answer 5:

1.安装力矩

npm install moment --save

2.测试这段代码在你的打字稿文件

import moment = require('moment');

console.log(moment().format('LLLL'));


文章来源: How can moment.js be imported with typescript?