Просто просмотрел справку для which()
после публикации этого сообщения и нашел ответ: параметр arr.ind.
which(a==23, arr.ind=TRUE)
row col
[1,] 3 5
Есть два объявления add
add(amount?: DurationInputArg1, unit?: DurationInputArg2): Moment;
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()
}
}
К сожалению, ни один из вышеупомянутых ответов не работал со мной! Но это только сделало очарование! :D
const startTime = moment().subtract(this.time.amount as moment.DurationInputArg1, this.time.unit as moment.DurationInputArg2);