Я изо всех сил пытаюсь найти правильный способ определения типов для библиотеки пространственных имен компонентов 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.Я могу ошибаться на многих уровнях здесь, но, по сути, все, что я до сих пор пробовал, либо не работало вообще (без предложений), либо предлагалось правильно только без пространств имен.
Можете ли вы указать, попытаться указать мне направильное направление?