2016-06-14 2 views
0

Есть ли способ расширить/добавить к существующей декларации с помощью потока?Добавить метод плагина к объявлению Moment.js в потоке?

В частности, в данном случае мы используем как Moment.js, так и a plugin that adds a format method to the Duration object.

Я установил third-party type declaration for momentjs на FlowInterfaces, но (естественно) у него нет дополнительного метода, предоставляемого плагином.

В настоящее время для решения этой проблемы я дублируется весь файл декларации с добавлением строки для нового метода, но в идеале не было бы способ обновить существующую декларацию, что-то вроде:

type moment$MomentOptions += { 
    format(format: ?string): string; // moment-duration-format 
} 

. .. но с более сильным синтаксисом :)

Так что мой вопрос в том, существует ли такая вещь для Flow?

ответ

1

К сожалению, без переопределения всего определения это невозможно currently.

На данный момент вы также можете расширить moment$Moment и использовать этот тип вместо этого в своем проекте. Но для этого потребуется большая часть результатов. Поэтому не уверен, что это лучшее решение; но в некоторых случаях это может помочь.

declare class moment$MyMoment extends moment$Moment { 
    format(format: ?string): string; 
} 

function fn(m: moment$MyMoment) { 
    m.format(''); // OK 
} 

const m = ((moment(new Date()): any): moment$MyMoment); 
fn(m); // OK