Отсутствие ввода при использовании window.require с Electron и TypeScript с приложением create-реагировать - PullRequest
1 голос
/ 16 октября 2019

У меня есть приложение Electron, которое использует create-react-app с конфигурацией TypeScript (которая использует Babel для компиляции кода TypeScript в JavaScript).

Я следовал совету использовать window.require в этом случаепри импорте таких модулей, как electron-store, которые обращаются к файловой системе, чтобы избежать столкновения с require Бабеля (что может привести к ошибке, например, fs.whatever not found).

Моя проблема заключается в том, что эти модули вводятся как any даже при наборе информации. Как вставить TypeScript в информацию о типе для модулей, импортированных с помощью window.require?

Чтобы конкретизировать, вот пример:

const Store = window.require('electron-store');

type StoreType = {
  'root-path': string;
};

// fails with "Untyped function calls may not accept type arguments."
export const store = new Store<StoreType>();

1 Ответ

1 голос
/ 17 октября 2019

Это не может быть сделано в общем, то есть для произвольных спецификаторов модулей, но я подозреваю, что только несколько модулей будут загружены таким образом. Учитывая это, лучше всего написать что-то вроде

 // augmentations.d.ts or whatever you want to call it.

 import ElectronStore from 'electron-store';

 declare global {
   interface Window {
     require(moduleSpecifier: 'electron-store'): typeof ElectronStore;
     require(moduleSpecifier: 'some-specifier'): SomeType; 
   }
 }
...