момент (). add () работает только с литеральными значениями

Просто просмотрел справку для which() после публикации этого сообщения и нашел ответ: параметр arr.ind.

which(a==23, arr.ind=TRUE)
     row col
[1,]   3   5
16
задан rocklobster 20 January 2017 в 17:04
поделиться

2 ответа

Есть два объявления add

  1. add(amount?: DurationInputArg1, unit?: DurationInputArg2): Moment;
  2. Устаревшие add(unit: unitOfTime.DurationConstructor, amount: number|string)

Когда машинопись необходимо сопоставить перегрузки, он пытается принять ближайший тип. Когда вы попытались передать units:string, самое близкое совпадение number|string - это вторая перегрузка , потому что любая строка будет соответствовать этому объявлению, т.е. 'qwe' или 'rty' типа string, но не DurationArg2, что ожидается в качестве второго параметра в первом объявлении .

Когда вы вызываете moment.add(1,'months), он будет использовать первое объявление , потому что можно привести 1 к типу первого аргумента в первой подписи, но не во второй.

Итак, чтобы исправить эту проблему и подобное, вы должны сказать, что именно хотите использовать.

Пример 1. Будет использоваться первая подпись

import * as moment from 'moment'

calculateRangeFromEnd(end: Date, unitsAmount: moment.DurationInputArg1, unitsMeasureMoment: moment.DurationInputArg2): IDateRange {
    return {
      endDate: end,
      startDate: moment(end).subtract(unitsAmount, unitsMeasureMoment).toDate()
    }
  }

Пример 2. Будет использоваться вторая подпись

import * as moment from 'moment'

calculateRangeFromEnd(end: Date, unitsAmount: number | string, unitsMeasureMoment: moment.unitOfTimes.DurationConstructor): IDateRange {
    return {
      endDate: end,
      startDate: moment(end).subtract(unitsMeasureMoment, unitsAmount).toDate()
    }
  }
2
ответ дан Nikita 20 January 2017 в 17:04
поделиться

К сожалению, ни один из вышеупомянутых ответов не работал со мной! Но это только сделало очарование! :D

const startTime = moment().subtract(this.time.amount as moment.DurationInputArg1, this.time.unit as moment.DurationInputArg2);
0
ответ дан 30 November 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: