【问题标题】:Typescript error with moment range plugin矩范围插件的打字稿错误
【发布时间】:2019-10-04 08:03:21
【问题描述】:

我在我的 Ionic 2 应用程序中包含了 moment jsmoment-range 插件,如下所示:

import * as moment from 'moment';
import 'moment-range';

这很好用,我可以同时使用它们,但是 Typescript 给了我以下错误:

Javascript:

let range = moment().range(self.weekStart, self.weekEnd);

打字稿错误:

Error TS2339: Property 'range' does not exist on type 'Moment'.

我已运行以下命令来尝试通过安装类型文件来阻止此错误:

typings install moment-range --ambient --save

但它似乎没有任何效果。还有什么我需要做的,或者有没有办法消除错误?

感谢您的帮助。

【问题讨论】:

  • 你也安装了typings文件吗?
  • 是的,我安装了momentmoment-node
  • 您可能需要在控制器/提供程序的顶部包含对类型文件的引用。我为看起来像这样的谷歌地图做了类似的事情....../// <reference path="../../../typings/google.maps.d.ts" />
  • 我尝试添加/// <reference path="../../../../typings/main/ambient/moment-range/index.d.ts" />,但仍然显示错误:(

标签: typescript ionic2


【解决方案1】:

我必须这样做:

import * as moment from "moment";
import {extendMoment} from "moment-range";
const rangeMoment = extendMoment(moment);
const range = rangeMoment.range(start, end);

【讨论】:

    【解决方案2】:

    这是我在“typescript”中工作的唯一方法:“3.4.5”

    const Moment = require('moment');
    import {extendMoment} from 'moment-range';
    
    const moment = extendMoment(Moment);
    

    【讨论】:

      【解决方案3】:

      我只是查看了接口。你需要打电话

      let range = moment.range(self.weekStart, self.weekEnd);
      

      不是moment().range

      如果您查看moment-range.d.ts,您会发现 range 方法是在静态接口MomentStatic 上定义的,而不是在实例接口Moment 上定义的。

      【讨论】:

      • 行得通,谢谢!当事情如此简单时,真是令人沮丧。我也使用了.toArray('days') 函数,但它不在打字文件中,所以我现在手动添加了toArray (string?: string): any;
      • 没问题。如果您在 .d.ts 文件中发现您认为是合法错误,请记住他们接受拉取请求。
      【解决方案4】:

      我无法让 Paarth 解决方案发挥作用。我还是得到了:

      Property 'range' does not exist on type 'typeof moment'.

      我的解决方案是使用类型断言:

      let range = (<any>moment).range(startDate, endDate);

      【讨论】:

        【解决方案5】:
        import * as moment from 'moment';
        import { extendMoment } from 'moment-range';
        
        const { range } = extendMoment(moment);
        
        const timeRange = range(moment.utc([2015, 0, 1]), moment.utc([2015, 5, 1]));
        
        for (const month of timeRange.by('month')) {
          console.log(month.format('YYYY-MM-DD'));
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多