Кто-нибудь столкнулся с этой ошибкой в TS с помощью средств decux dev? "Свойство" __REDUX_DEVTOOLS_EXTENSION_COMPOSE__ "не существует в типе" Окно "."?
Я получаю эту ошибку на моем index.tsx.
Свойство " REDUX_DEVTOOLS_EXTENSION_COMPOSE " не существует в типе "Окно".
Вот мой код index.tsx:
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import App from './App';
import './index.css';
import registerServiceWorker from './registerServiceWorker';
import { Provider } from 'react-redux';
import { createStore, compose, applyMiddleware } from 'redux';
import rootReducer from './store/reducers';
import thunk from 'redux-thunk';
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(rootReducer, composeEnhancers(
applyMiddleware(thunk)
));
ReactDOM.render( <Provider store={store}><App /></Provider>, document.getElementById('root'));
registerServiceWorker();
Я установил @types/npm install --save-dev redux-devtools-extension, и я использую create-react-app-typescript. Большое спасибо за любые советы о том, что происходит заранее.
Ответы
Ответ 1
Это частный случай этого вопроса. Redux не предоставляет типы для __REDUX_DEVTOOLS_EXTENSION_COMPOSE__
потому что эта функция предоставляется Redux DevTools, а не самим Redux.
Это либо:
const composeEnhancers = window['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__'] as typeof compose || compose;
Или же:
declare global {
interface Window {
__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?: typeof compose;
}
}
const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
Это уже сделано с redux-devtools-extension
пакета redux-devtools-extension
, который содержит типизированные шрифты. Если он установлен, его импорт следует использовать вместо того, чтобы обращаться к __REDUX_DEVTOOLS_EXTENSION_COMPOSE__
вручную.
Ответ 2
Мой подход к проблеме был следующим:
export const composeEnhancers =
(window && (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose;
Ответ 3
Изменился ли тот же вопрос, я только что изменился
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
в
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__() || compose
преодолеть undefined
проблему применения при использовании createStore(reducer, initial state, compose(applyMiddleware
Ответ 4
Работая как шарм:
const store = createStore(
rootReducer,
initialState,
compose(
applyMiddleware(...middleware),
(window as any).__REDUX_DEVTOOLS_EXTENSION__ && (window as any).__REDUX_DEVTOOLS_EXTENSION__()
)
);
Ответ 5
Самый простой способ сделать эту работу с TypeScript
- это использовать redux-devtools-extension и установить как зависимость dev следующим образом:
npm install --save-dev redux-devtools-extension
Следующий шаг для новичков в redux
и этих инструментов разработчика был запутанным и неясным. Все документы имеют следующий код:
const store = createStore(reducer, composeWithDevTools(
applyMiddleware(...middleware),
// other store enhancers if any
));
Проблема в том, что у меня не настроено промежуточное программное обеспечение, поэтому оно не работает. В самом примитивном использовании это все, что вам нужно:
import { composeWithDevTools } from 'redux-devtools-extension';
const store = createStore(myReducer, composeWithDevTools());
На этом этапе, если вы щелкнете по расширению в браузере и в нем будет действительное хранилище с избыточностью, вы сможете проверить состояние.
Это альтернативный подход к использованию (window as any)
, а также разъясняет, как использовать redux-devtools-extension
в его минимальной форме.