Как создать наборы для библиотеки компонентов React в пространстве имен - PullRequest
0 голосов
/ 16 декабря 2018

Я изо всех сил пытаюсь найти правильный способ определения типов для библиотеки пространственных имен компонентов React.Я прочитал несколько статей и справок в Интернете, но чем больше статей я читаю, тем больше я запутался.В основном библиотека имеет компоненты в 2-х уровнях глубинного вложения Reader.Book.Header, где Reader и Book - пространство имен, а Header - компонент.Reader - это export default, и это также глобальная переменная для объекта window.

/// <reference types="react" />
import React = require("react");

export type HeaderProps = {
    author: string
}

export interface Header extends React.Component<HeaderProps>{
    sayHello(name:string) : void
}

declare const Reader: {
    Header: Header
};

export default Reader;

Текущее состояние моих наборов выглядит примерно так (только 1 уровень вложенности, чтобы попробовать сначала), где я пытаюсь выяснить, почему

import {Header} from "./types";

Правильнообеспечивает автозаполнение для <Header /> реквизитов, а

import Reader from "./types";

, по-видимому, не запускает автозаполнение для <Reader.Header />.Внутри синтаксиса JSX WebStorm предлагает вместо этого HeaderProps, в то время как вне JSX (в чистом JS) WebStorm правильно предлагает метод Header и sayHello.

Вчера я натолкнулся на material-uiнабирая , так как они тоже имеют пространство имен и имеют немного другой синтаксис с declare module.Не знаю, что об этом думать.

Основная цель - правильно настроить автозаполнение в WebStorm, но я считаю, что как только он работает в WebStorm, он также работает и в VSC.Я могу ошибаться на многих уровнях здесь, но, по сути, все, что я до сих пор пробовал, либо не работало вообще (без предложений), либо предлагалось правильно только без пространств имен.

Можете ли вы указать, попытаться указать мне направильное направление?

...