Правильное определение типа для класса React со статическими компонентами-членами - PullRequest
0 голосов
/ 30 ноября 2018

Я опубликовал компонент React на npm (написанный на JS) и хотел бы предоставить для него файл типографских данных .d.ts.Однако я изо всех сил пытаюсь заставить типы работать.Вот (упрощенная) ситуация (в JS):

class Async extends React.Component { ... }
const Pending = (props) => <div>{props.children}</div>
Async.Pending = Pending

Ожидание - это функциональный компонент, который отображается как статический член класса Async.

Теперь у меня есть следующее определение типадля него (в typings / index.d.ts):

declare class Async<T> extends React.Component<Props<T>, State<T>> {}
declare namespace Async {
  export function Pending<T>(props: { children?: Children<T> }): React.ReactNode
}
export default Async

Props<T> и State<T> - интерфейсы.Children<T> является псевдонимом типа.

В этой настройке я постоянно нажимаю на эту ошибку: «Ошибка типа: класс элементов JSX не поддерживает атрибуты, поскольку у него нет свойства props».

Мне удалось заставить его работать следующим образом:

type AsyncInterface<T> = React.ComponentClass<Props<T>, State<T>>
declare const Async: AsyncInterface<any>
export default Async

Однако я не вижу способа определить Pending как статический член для этого.

Полный исходный кодздесь: https://github.com/ghengeveld/react-async

...