gpt4 book ai didi

javascript - 如何在 Flow 中指定 Moment.js 对象注释

转载 作者:可可西里 更新时间:2023-11-01 01:16:23 26 4
gpt4 key购买 nike

我目前正在学习 Flow,方法是将其应用到现有项目并希望将函数参数注释为 Moment.JS 对象。

使用 flow-typed我能够为 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 无法识别它们。在下面的函数中,startDateendDate 是 Moment.JS 日期对象。

const filterByDateWhereClause = (startDate: Moment, endDate: Moment): string => {...};

流程给出以下错误:

const filterByDateWhereClause = (startDate: Moment, endDate: Moment): string =>
^^^^^^ identifier `Moment`. Could not resolve name

这甚至可以通过 Flow 实现吗?或者我是否需要复制 Moment.JS 对象的 type 与 flow-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 => {...};

我错过了什么?

最佳答案

可以通过三种方式得到你想要的类型。

如果你的文件已经需要 moment 作为一个模块,你应该能够使用那个类型

import moment from 'moment';

const filterByDateWhereClause = (startDate: moment, endDate: moment): string => {...};

或者如果您不使用源代码而只使用文件中的类型。

import type Moment from 'moment';

const filterByDateWhereClause = (startDate: Moment, endDate: Moment): string => {...};

您可以这样做,因为这是 libdef 指定为模块导出的内容: https://github.com/flowtype/flow-typed/blob/7822da72587078a4b8e0f2b56746d0da41a3ddde/definitions/npm/moment_v2.x.x/flow_v0.34.x-/moment_v2.x.x.js#L233

或者,看起来 libdef 也在全局命名空间中声明了一个类型 moment$Moment,因此您可以使用它。

const filterByDateWhereClause = (startDate: moment$Moment, endDate: moment$Moment): string => {...};

我不推荐全局使用,因为它不太明确类型的来源。

关于javascript - 如何在 Flow 中指定 Moment.js 对象注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43036634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com