Как определить тип для реквизита
Код:
let component = ReasonReact.statelessComponent("Page");
type matchParams = {.
id: int
};
type match = {.
params: matchParams
};
type userProps = {.
match: match
};
let home = <Home />;
let user = (~props:userProps) => <User id=props.match.params.id />;
let make = (_children) => {
...component,
render: (_self) =>
<div> <Route key="home" exact=false path="/home" component=home />
<Route key="user" exact=false path="/user/:id" component=user /> </div>
};
Выход:
Несвязанное совпадение полей записи
на ряду
let user = (~props:userProps) => <User id=props.match.params.id />;
как определить тип, что я делаю неправильно?
1 ответ
Решение
Ошибка вызвана match
будучи зарезервированным ключевым словом. Вы должны были получить лучшее сообщение об ошибке, хотя я бы посчитал это ошибкой в Reason. Чтобы решить это, если вам нужно скомпилировать в match
на стороне JS, вы можете использовать _match
вместо этого просто используйте другое имя.
У вас также (вероятно) есть несколько других проблем:
let home = <Home />
не такая функция, какuser
, Это, вероятно, должно бытьlet home = () => <Home/>
Вы определяете тип записи как
props
который будет дан вамcomponent
функция. Но вы, вероятно, получите объект JS вместо записи. Смотрите руководство Reason, которое объясняет разницу.