Есть два объявления 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()
}
}
\ b в регулярных выражениях соответствует границам слова (то есть местоположению между первым символом слова и символом, не являющимся словом) :
$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
Используйте \ b
для границ слов:
sed -i 's/\boldtext\b/newtext/g' <file>
В одной из моих машин разделение слов с помощью "\b
" (без кавычек) не сработало. Решением было использовать "\<
" для начального разделителя и "\>
" для конечного разделителя.
Поясню на примере Joakim Lundberg:
$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment