momentjs和moment-range的打字稿类型不能一起工作

时间:2016-10-20 16:30:09

标签: momentjs typescript-typings

我正在使用momentjsmoment-range使用Typescript,因此我从moment-range安装了npm @types的打字输入,并且momentjs的输入随附它

import * as moment from 'moment';
import 'moment-range';
...
private tableDatePeriod: moment.Range;

但是在编译时我收到此错误 - [ts] Module 'moment' has no exported member 'Range'.

2 个答案:

答案 0 :(得分:1)

试试这个

import * as moment from 'moment';
import { default as DateRange } from 'moment-range';

let Range=new DateRange(dayFrom, dayTo);
Range.toArray('days');

let DatesArray=[];
diffDatesArray.push(moment(some_prop_from_array._d).format("YYYY-MM-DD"));

答案 1 :(得分:0)

以下适用于我的版本:

  • 时刻:2.17.1
  • 时刻范围:2.2.0
  • @ types / moment-range:2.0.33

问题是moment-range.js没有为范围功能导出任何新实体,它扩展了moment类型的范围功能。因此,应从moment导入这些功能。

import {Moment, Range, range as RangeConstructor} from "moment";

此导入moment-range加载 moment个功能。在此示例中,我导入Range接口和range工厂方法(以创建/构造范围)。 这应该足够了,但是如果您使用某种类型的AMD或类似的依赖项,则应加载moment-range模块(使用AMD术语需要)。 以下是为我工作的黑客攻击:

import DateRange = require("moment-range");
DateRange;

第一次导入包括moment-range模块作为当前模块的依赖项,因此首先根据需要加载它。 第二行不执行任何操作,但TypeScript编译器会删除未使用的依赖项,因此必须以某种方式调用以前导入的依赖项,以避免此类编译器优化。

在提及您的问题时,您现在可以实例化变量:

private tableDatePeriod: Range;

并初始化:

tableDatePeriod = RangeConstructor('2016-01-09', '2016-01-10');