首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aurelia & TypeScript & MomentJS

Aurelia & TypeScript & MomentJS
EN

Stack Overflow用户
提问于 2016-09-04 14:36:52
回答 2查看 1.6K关注 0票数 3

我不能让Aurelia (CLI)和TypeScript & MomentJS一起工作。我已经看到了Aurelia &矩问题的解决方案,但是他们没有使用Aurelia。

我现在正在做的事情是:

使用Aurelia:新的Aurelia项目:

代码语言:javascript
复制
au new 

我选择TypeScript而不是Babel。

安装力矩

代码语言:javascript
复制
npm install moment --save

这个安装时刻为2.4.1。我可以从node_modules找到它(包括moment.d.ts)。

编辑aurelia.json

我在“依赖项”中添加“瞬间”:

在app.ts中的使用矩

当我现在尝试导入app.ts的时候,问题就开始了。

代码语言:javascript
复制
import { moment } from 'moment';

这就产生了错误:“模块"o:/dev/spikes/amoment/node_modules/moment/moment”没有导出成员的‘瞬间’

更改套管修复了此错误:

代码语言:javascript
复制
import { Moment } from 'moment';

但现在我完全被困住了。在尝试使用矩(或矩)时,我总是会遇到错误“无法找到名称的‘瞬间’”。下面是当前的app.ts,它给出了“无法找到名称‘瞬间’”-error:

代码语言:javascript
复制
import { Moment } from 'moment';

export class App {
  message = 'Hello World!';

  hello() : string {
    return moment.format();
  }
}

进口似乎是问题所在。有什么办法绕过这件事吗?

更新

在将app.ts修复为如下所示之后,现在编译。但在运行时,它给出了"TypeError:无法读取未定义的属性‘格式“。

代码语言:javascript
复制
import { Moment } from 'moment';
import { autoinject } from "aurelia-framework";

export class App {
  message: string;
  moment: Moment;

  constructor(moment: Moment) {
    this.moment = moment;
    this.message = this.moment.format('MMMM Do YYYY, h:mm:ss a')
  }
}

更新

根据最后一个错误,如果没有@autoinject,则自动注入似乎无法工作。因此,错误发生了变化:"TypeError: moment.format不是函数“。

代码语言:javascript
复制
import { Moment } from 'moment';
import { autoinject } from "aurelia-framework";

@autoinject
export class App {
  message: string;
  moment: Moment;

  constructor(moment: Moment) {
    this.message = moment.format();
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-04 23:14:34

MomentJS是一个全局模块,它只导出一个moment变量。d.ts文件中的其他接口定义,例如interface Moment,不会真正导出。这些是用于TypeScript编译器和intellisense的。

这就是为什么您在上面经历了TS编译器和TypeError问题。您可能用自动注入来欺骗编译器,但没有使用浏览器。

矩量定义文件

代码语言:javascript
复制
declare module 'moment' {
    var moment: moment.MomentStatic;
    export = moment;
}

为了使它正常工作,使用如下所示的导入语句:[瞬间医生]

import * as moment from 'moment';

之后,moment变量就可用了,您可以像往常一样使用它。

类中的用法:

代码语言:javascript
复制
import * as moment from 'moment';

export class App {
    message = 'Hello World!';

    constructor(){
    }

    hello() : string {
        return moment().format();
    }
}
票数 8
EN

Stack Overflow用户

发布于 2016-09-04 14:42:01

更新

这实际上不起作用。不是编译的东西,但在运行应用程序时,我得到了"TypeError:无法读取未定义的属性“。

原始

啊,愚蠢的我。我只需要给班上注射点时间。很明显。

下面是工作版本:

代码语言:javascript
复制
import { Moment } from 'moment';
import { autoinject } from "aurelia-framework";

export class App {
  message = 'Hello World!';
  moment: Moment;

  constructor(moment : Moment){
    this.moment = moment;
  }

  hello() : string {
    return this.moment.format();
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39318051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档