私はJSPM
、AngularJS
、TypeScript
、SystemJS
、およびES6
を使用していますが、私のプロジェクトはかなりうまく実行されています... momentJSを使用します。
これは私が得るエラーです:
TypeError:モーメントは関数ではありません
これはコードの一部です:
import * as moment from 'moment';
もっと:
var momentInstance = moment(value);
デバッグすると、モーメントは関数ではなくオブジェクトです。
これは、私のmoment.js JSPMパッケージの外観です。
module.exports = require("npm:[email protected]/moment.js");
私はたくさん読んで、これを解決する方法を見つけることができませんでした...アイデアはありますか?
私が読んだ/試したもの:
SystemJSでTypeScriptでmomentjsを使用する方法?
https://github.com/angular-ui/ui-calendar/issues/154
https://github.com/jkuri/ng2-datepicker/issues/5
momentJSのTypeScriptモジュールシステムの動作がおかしい
https://github.com/dbushell/Pikaday/issues/15
ありがとう!
Importステートメントからグループ化(* as
)を削除するだけです:
import moment from 'moment';
ソースコード を深く掘り下げることなく、moment
は通常、あらゆる種類のメソッドやその他のプロパティが関連付けられた関数をエクスポートするように見えます。
* as
を使用すると、これらすべてのプロパティを効果的に取得してnewオブジェクトにアタッチし、元の関数を破棄します。代わりに、チーフエクスポート(ES6ではexport default
、Node.jsではmodule.exports
オブジェクト)のみが必要です。
あるいは、あなたはすることができます
import moment, * as moments from 'moment';
モーメント関数asmoment
、およびmoments
と呼ばれるオブジェクトの他のすべてのプロパティを取得します。 moment
は同じプロパティを保持するため、このようなES5エクスポートをES6スタイルに変換する場合、これは少し意味がありません。
これは私のために働いた:
import moment from 'moment/src/moment'
私に同じエラーを与えていた初心者のJSの間違い:
_foobar(moment) {
console.log(moment().whatever());
}
_
パラメーターにmoment
という名前を付けると、moment()
関数へのアクセスが中断されます。
私は次のコード形式を持っていて、同様のエラーが発生しました。
export const input = {
year: moment().year()
};
class EventExplorer extends Component {
state = {};
// rest of the code
}
次に示すように、入力オブジェクトをEventExplorerクラス内に移動しました
class EventExplorer extends Component {
state = {};
input = {
year: moment().year()
};
// rest of the code
}`