現在、プロジェクトをES5からES6に変換していますが、MomentJS(_version 2.18.1
_)の問題に直面しています。問題は、Momentオブジェクトである変数がいくつかあることですが、それらに対してmoment()を呼び出すことはできません。
例:
_ import * as moment from "moment";
export class DateThingy{
constructor(private moment) { //What type does this have??
}
public getDate(): moment.Moment {
return this.moment();
}
}
_
1)_private moment
_のタイプを_private moment: moment
_に設定した場合、WebStormから「名前 'moment'が見つかりません。」
2)タイプを_private moment: moment.Moment
_に設定すると、オブジェクトが変更され、this.moment()
を呼び出せなくなります(オブジェクトになり、関数呼び出しはありません)。 Webstormから「タイプが呼び出し署名を持たない式を呼び出すことはできません。タイプ「Moment」には、呼び出し可能な署名がありません。」
3)MomentStaticはエクスポートされないため、もう使用できません。 _private moment: moment.MomentStatic
_と入力すると、WebStormから次のように表示されます: "namespace 'moment'にはエクスポートされたメンバー 'MomentStatic')がありません
それでは、この例ではどのタイピングを使用すべきでしょうか?
Mike McCaughan が述べたように、モーメントオブジェクトはコンストラクターに注入できません。どういうわけか、これは古いバージョンのMomentJSで可能でした。これは、コンストラクタープロパティを削除し、_import * as moment from "moment"
_を介して含まれているグローバルモーメントオブジェクトにアクセスすることで解決できます。
関数moment()
はMoment
オブジェクトを返します。これは_moment.Moment
_で入力できます。
したがって、コードは次のように書き換えることができます。
_import * as moment from "moment";
export class DateThingy{
constructor() {
}
public getDate(): moment.Moment {
return moment();
}
}
_
エイリアスなしで瞬間をインポートしようとしましたか?
_import moment from 'moment';
_
これは私のために働いた。また、TypeScriptコンパイラはそれについて文句を言いません。
const date = moment().format('YYYYMMDD');
これにはtsconfigの更新が必要です!
TSConfigでは、オプション allowSyntheticDefaultImports を追加して、デフォルトのエクスポートがないライブラリのデフォルトのインポートを許可する必要があります。
例(tsconfig.json):
_{
"compileOnSave": false,
"compilerOptions": {
"allowSyntheticDefaultImports": true,
}
}
_