Как определить тип для реквизита

Код:

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 вместо этого просто используйте другое имя.

У вас также (вероятно) есть несколько других проблем:

  1. let home = <Home /> не такая функция, как user, Это, вероятно, должно быть let home = () => <Home/>

  2. Вы определяете тип записи как props который будет дан вам component функция. Но вы, вероятно, получите объект JS вместо записи. Смотрите руководство Reason, которое объясняет разницу.

Другие вопросы по тегам