2016-10-20 3 views
0

Ich verwende momentjs und moment-range mit einem Typoskript, so habe ich Typisierungen für moment-range von npm @types installieren und die Typisierung für momentjs mit ihm kommt.Typoskript Typisierungen für momentjs und Zeit-Bereich nicht zusammen arbeiten

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

aber auf der Kompilierung ich diese Störung erhalte - [ts] Module 'moment' has no exported member 'Range'.

Antwort

1

testen

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")); 
+0

dies nützlich, aber mit einer früheren Version von Zeit und Zeit-Bereich – ivayloc

+0

für mich es funktioniert für die Versionen "Moment": "^ 2.16.0", "Moment-Bereich": "^ 2.2.0" ' –

0

Die folgenden Werke für mich für die Versionen:

  • Moment: 2.17.1
  • Moment-Bereich: 2.2.0
  • @ Typen/Zeit-Bereich: 2.0.33

Das Problem ist, dass moment-range.js nicht für den Bereich Funktionalität jede neue Einheit nicht exportieren, erstreckt es moment Typ mit Bereich Funktionalitäten. Daher sollten diese Funktionalitäten von moment importiert werden.

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

Dieser Import Lasten die moment-range Funktionalitäten von moment. In diesem Beispiel importiere ich Range Schnittstelle und range Factory-Methode (um Bereiche zu erstellen/zu konstruieren). Das sollte reichen, aber falls Sie irgendeine Art von AMD oder eine ähnliche Abhängigkeit verwenden, sollte das moment-range Modul geladen werden (erforderlich unter Verwendung von AMD-Bedingungen). Im Folgenden ist der Hack, die funktioniert für mich:

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

Der erste Import moment-range Modul als Abhängigkeit des aktuellen Moduls umfasst daher wird es zunächst nach Bedarf geladen. Die zweite Zeile führt nichts aus, aber der TypeScript-Compiler entfernt nicht verwendete Abhängigkeiten. Daher muss die frühere importierte Abhängigkeit in irgendeiner Weise aufgerufen werden, um eine solche Compiler-Optimierung zu vermeiden.

auf Ihre Frage in Bezug, können Sie die Variable instanziiert jetzt:

private tableDatePeriod: Range; 

und initialisieren:

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