2016-09-04 9 views
3

Aurelia(CLI)& TypeScript & MomentJSが連携して動作しません。私はAureliaの解決策を見た&瞬間の問題がありますが、AureliaのCLIを使用していません。Aurelia CLI&TypeScript&MomentJS

は、ここで私は、現時点ではやっているものです:オーレリアCLIを使用して

新オーレリアプロジェクト:

au new 

私は活字体の代わりに、バベルを選択します。

瞬間

npm install moment --save 

これはモーメント2.4.1をインストールしますインストールします。私はnode_modulesからそれを見つけることができます(moment.d.tsを含む)。今私

問題が開始app.tsで

Moment aurelia.json

利用モーメント:

編集は、私は、 "依存関係" に "瞬間" を追加し

をaurelia.json app.tsのMomentをインポートしようとします。

import { moment } from 'moment'; 

これはエラーを与える:「モジュール "O:は/ dev /スパイク/ amoment/node_modules /瞬間/瞬間" には、エクスポートメンバー '瞬間' を持っていない

をケーシングの修正にこのエラーを変更する:

import { Moment } from 'moment'; 

しかし、この時点で私は完全に固執しています。瞬間(またはモーメント)を使用しようとすると、「名前を見つけることができません」というエラーが表示されます。ここで、「名前を見つけることができません "一瞬」-errorを与えている現在のapp.tsです:

import { Moment } from 'moment'; 

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

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

輸入が問題のようです。これを回避する方法は?以下のように見えるようにapp.tsを固定した後

更新

は、事は今コンパイルします。しかし、 "TypeError:実行時に、未定義のプロパティ '形式'を読み取れません。最後のエラーに基づいて

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が@autoinjectなしで働いていなかったようです。だからそれを追加し、エラーが変更されます: "TypeError:moment.formatは関数ではありません"。

import { Moment } from 'moment'; 
import { autoinject } from "aurelia-framework"; 

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

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

答えて

8

MomentJSはmoment変数をエクスポートグローバルモジュール、です。 d.tsファイル内の他のインタフェース定義。 interface Momentは、実際にはエクスポートされません。これらは、TypeScriptコンパイラとIntellisense用です。

上記の理由で、TSコンパイラとTypeErrorの問題が発生しました。あなたは、自動インジェクションを使ってコンパイラを騙したが、ブラウザは騙さなかったかもしれない。

一瞬のdefinition file

declare module 'moment' { 
    var moment: moment.MomentStatic; 
    export = moment; 
} 

それは、このようなimport文を使用、作業得るために:その後[moment docs]

import * as moment from 'moment';

を、moment変数が利用可能になり、あなたあなたが通常どおりに使用することができます。あなたのクラスの

用途:

import * as moment from 'moment'; 

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

    constructor(){ 
    } 

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

は、あなたがより多くの理由 '輸入に手の込んだことができます*「瞬間」から瞬間など;'「から '輸入モーメントを使用していますオーレリアドキュメントに対して必要とされる瞬間'; 'http://aurelia.io/hub.html#/doc/article/aurelia/binding/latest/binding-value-converters/3 – wal

0

更新

これは実際に動作しません。物事はコンパイルされませんが、 "TypeError:アプリケーションを実行するときに、未定義のプロパティ '形式'を読み取ることができません。

オリジナル

ああ、愚かな私。私はちょうどクラスにモーメントを注入しなければならなかった。明らかに。

ので、ここで作業バージョンです:

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(); 
    } 
} 
関連する問題