Передать реквизиты дочернему компоненту в React с помощью Typescript (файл TSX)

Я использую VS2013 и настраиваю существующий проект для использования React (0.14) и Typescript (1.8.5). Мой код React прекрасно работает как файл JSX. У меня есть одна ошибка в моем новом файле TSX, которую я не могу понять.

У меня есть 30 странных ошибок на каждом объекте, вставленном в дерево внизу - все это выглядит так:

Свойство nameOfProp не существует для типа "IntrinsicAttributes & IntrinsicClassAttributes> & {} & { children?: Reac...".

Вот пример кода, который расстраивает TypeScript. Любая помощь будет принята с благодарностью, так как это одно из последних препятствий для запуска и запуска React в производство. ПРИМЕЧАНИЕ. Я не включил информацию о состоянии приложения для экономии места, но красные линии указаны только на именах дочерних компонентов (фильтр, имя, идентификатор, количество).

var App = React.createClass({
  render: function() {
    render (
      <FilterItem 
      filter={this.state.artifactFilter}
      count={this.state.count}
      id={this.state.id}
      name={this.state.name}
      />
    )
  }
});
var FilterItem = React.createClass({
  render: function() {
    return (
      <span>{this.props.name} ({this.props.count})</span>
  )
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react-dom.min.js"></script>

1 ответ

Подпись для React.createClass является:

function createClass<P, S>(spec: ComponentSpec<P, S>): ClassicComponentClass<P>;

Универсальный P а также S определить реквизит и состояние.
Компилятор не знает, что это за типы, и поэтому использует базу, которая является типом, который вы получаете в своей ошибке.

Ты можешь сделать:

interface AppState {
    filter: string;
    count: number;
    id: string;
    name: string;
}
var App = React.createClass<{}, AppState>(...);

interface FilterItemProps {
    count: number;
    name: string;
}
var FilterItem = React.createClass<FilterItemProps, {}>(...);

Если вы используете классы:

class App extends React.Component<{}, AppState> {
    render() {
        ...
    }
}
Другие вопросы по тегам