Сочетание деструктуризации объекта с потоковой типизацией

Я только что добавил Flow в свой проект Create-React-App и преобразовал часть моего кода расчета в поток -typed, я столкнулся с этой ошибкой с деструктурированным «объектом в качестве параметров»

Оригинальный знак:

calcWeightOnConveyor({ tonsPerHour, conveyorLength, conveyorSpeed })

После проточного типа:

calcWeightOnConveyor({ tonsPerHour: number, conveyorLength: number, conveyorSpeed: number }): number

И ошибка:

$ flow
Error: src/utils/vortex/calculate.js:31
 31: export function calcWeightOnConveyor({ tonsPerHour: number, conveyorLength: number, conveyorSpeed: number }) {
                                                                                 ^^^^^^ Strict mode function may not have duplicate parameter names

Есть ли способ использовать поток с деструктурированием объектов таким образом, или мне следует перепроектировать эти API-интерфейсы функций?


person typeoneerror    schedule 12.01.2018    source источник
comment
Когда вы используете двоеточие при деструктурировании, правая часть двоеточия фактически создает новую переменную. Вы создаете две переменные с именем number. Ознакомьтесь с документацией MDN: developer.mozilla. org/en-US/docs/Web/JavaScript/Reference/   -  person Ross Allen    schedule 12.01.2018
comment
Здесь тип потока сталкивается с ES6.   -  person Jonas Wilms    schedule 12.01.2018
comment
github.com/facebook/flow/issues/235   -  person Jonas Wilms    schedule 12.01.2018


Ответы (2)


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

type Props = {
  prop: Type,
};

const Component = ({
  prop,
}: Props) => ();
person paulruescher    schedule 12.01.2018
comment
ссылка на гитхаб 404 кстати - person typeoneerror; 13.01.2018
comment
ой :| удалено, так как я думаю, что на данный момент у нас есть это частное репо. - person paulruescher; 13.01.2018

Да, вы можете сделать это, аннотировав весь объект следующим образом:

calcWeightOnConveyor({
  tonsPerHour,
  conveyorLength,
  conveyorSpeed
}: {
  tonsPerHour:number,
  conveyorLength:number,
  conveyorSpeed:number
}):number
person Ross Allen    schedule 12.01.2018
comment
Вероятно, лучший ответ, пока поток/ts не решит это с помощью as или paren-style { (tonsPerHour:number) }, как указано в комментариях @jonas-w выше. - person typeoneerror; 12.01.2018