Правильный способ обработки неопределенных файлов объявлений (index.д.ТС)
я получил следующую ошибку
error TS7016: Could not find a declaration file for module 'react-native-camera'. '/Users/ilja/Documents/Repositories/blok/node_modules/react-native-camera/index.js' implicitly has an 'any' type.
Try `npm install @types/react-native-camera` if it exists or add a new declaration (.d.ts) file containing `declare module 'react-native-camera';`
в качестве быстрого исправления я создал typings/index.d.ts
(нет файла @types / react-native-camera) в корне моего проекта и заполнил его
declare module 'react-native-camera';
затем, в моем файле tsconfig я добавил его в мои корни типа, как это
"typeRoots": ["node_modules/@types", "./typings"],
однако я все еще получаю ту же ошибку, когда я строю, заставляя меня думать, что моя реализация неверна, что я пропустил?
Edit, мой полный tsconfig выглядит так это
{
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"lib": ["es7"],
"allowJs": true,
"checkJs": true,
"jsx": "react-native",
"removeComments": true,
"outDir": "./dist",
"typeRoots": ["node_modules/@types", "./typings"],
"experimentalDecorators": true,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"allowSyntheticDefaultImports": true,
"strict": true
},
"exclude": ["./node_modules", "./android", "./ios", "./assets", "./__tests__", "./dist"],
"include": ["./src"]
}
2 ответов
на typeRoots
Options указывает, где искать пакетов, который может содержать информацию о типе. The документация продолжает говорить, что компилятор ищет пакетов.
я воспроизвел структуру, которую вы описали, и получил ту же ошибку, что и вы. Затем я создал react-native-camera
под typings
и двигался index.d.ts
так что я в конечном итоге с этим структуру:
typings/
└── react-native-camera
└── index.d.ts
С этой структурой, составление работает просто отлично.
С помощью typings
структура каталогов в порядке, если вы хотите такую структуру. Для некоторых проектов я использую
С документ flowtype, раздела определений библиотеки, он сказал:
libdef-это специальный файл, который информирует поток о сигнатуре типа какого-либо конкретного стороннего модуля или пакета модулей, которые использует приложение. Если вы знакомы с языками, которые имеют заголовок файлы (например, C++), вы можете думать о libdefs как о аналогичной концепции.
Общие Рекомендации
попробуйте предоставить libdef для каждого сторонняя библиотека, используемая вашим проектом.
посмотреть в .flowconfig в корневом пути вы увидите, что он уже определен там.
[libs]
node_modules/react-native/Libraries/react-native/react-native-interface.js
node_modules/react-native/flow
./libdefs.js
а затем искать libdefs.js в корневом пути он должен быть там. Или просто создать его самостоятельно.
для каждого модуля, объявить его, как показано ниже. Взять rxjs
например:
declare module 'rxjs' { declare var exports: any; }
это официальный способ предложения, нет .д.ТС изменить необходимый.