現在、Flowを既存のプロジェクトに適用し、Moment.JSオブジェクトとして関数パラメータに注釈を付けることでFlowを学習しています。私はMoment.JSオブジェクトとして関数のパラメータに注釈を付けるしようとすると、しかしFlow内のMoment.jsオブジェクト注釈の指定方法
declare class moment$Moment {
static ISO_8601: string;
static (string?: string, format?: string|Array<string>, locale?: string, strict?: bool): moment$Moment;
static (initDate: ?Object|number|Date|Array<number>|moment$Moment|string): moment$Moment;
static unix(seconds: number): moment$Moment;
static utc(): moment$Moment;
...
:私は私が探しているタイプを持っているように見えますMoment.JSためのライブラリ定義をインストールすることができたflow-typedを使用して
フローは、フローをそのまま認識しません。次の関数startDate
とendDate
は、Moment.JSの日付オブジェクトです。
const filterByDateWhereClause = (startDate: Moment, endDate: Moment): string => {...};
流れは次のエラーを与える:
const filterByDateWhereClause = (startDate: Moment, endDate: Moment): string =>
^^^^^^ identifier `Moment`. Could not resolve name
が、これは流れにさえ可能ですか?または、flow-typeによって提供されるライブラリ定義のものと同じMoment.JSオブジェクトに対してtype
を複製する必要がありますか?私はlibdefがかなり長いので、これをやりたくないのです。例えば
:
declare class Moment {
static ISO_8601: string;
static (string?: string, format?: string|Array<string>, locale?: string, strict?: bool): moment$Moment;
static (initDate: ?Object|number|Date|Array<number>|moment$Moment|string): moment$Moment;
static unix(seconds: number): moment$Moment;
static utc(): moment$Moment;
...
const filterByDateWhereClause = (startDate: Moment, endDate: Moment): string => {...};
は、私が何をしないのですか?瞬間オブジェクトからサブクラスを作成しているかのように思え
私はWebpackを使っているので、おそらくグローバルな名前空間がないので、 'moment $ Moment'は私にとってはうまくいかないでしょうか? 2つのインポートメソッドが機能しました。 – clhenrick
Webpackはフローの実行方法に影響を与えません。グローバルタイプがなぜ機能しないのか分かりませんが、実際には使用しないでください。 CONTRIBUTING.mdドキュメンテーションは、フロータイプのために、libdefの作成者に、グローバルではないグローバルに接頭辞を付けるよう指示します。(https://github.com/flowtype/flow-typed/blob/316320bf2cbc48a9447e053272a5c113e6e26a8c/CONTRIBUTING.md#prefix-global-variables本当に意味のあるものであることを意味します)、とにかくそれを使用すべきではありません:) –