我在用TypeScript (3.0.1)编写的基于科多瓦的应用程序中使用了TypeScript,我希望能够看到这个插件的类型。
因此,我使用npm安装包@types/cordova-plugin-camera。在安装过程中,npm显示WARN deprecated不需要解释这个@types包,因为输入已经包含在包cordova-plugin-camera中。因此,我再次删除包。
然后我开始编译,但是它在error TS2339: Property 'camera' does not exist on type 'Navigator'中失败了。我的理解是,这应该是开箱即用的(至少对于@types包),但是TypeScript似乎不知道它应该包括直接来自cordova-plugin-camera的类型。这似乎是合乎逻辑的,因为我没有明确的语句告诉import 'cordova-plugin-camera',但是没有必要,因为我只使用由cordova加载的全局可用对象。
如何让TypeScript直接从cordova-plugin-camera加载类型
可能的解决办法我已经试过了
import 'cordova-plugin-camera'
在我的情况下不工作,因为我工作的项目是相当老的,不支持模块。它只使用outFile和"module": "none"生成一个文件。
types属性在tsconfig.json中的使用
添加
"types": [
"cordova-plugin-camera"
]tsconfig.json为cordova-plugin-camera工作,但会导致TypeScript停止加载所有其他包的类型,因此我必须将每个带有类型的包添加到tsconfig.json中。
typeRoots属性在tsconfig.json中的使用
添加
"typeRoots": [
"./node_modules/@types",
"./node_modules/cordova-plugin-camera"
]tsconfig.json适用于cordova-plugin-camera和其他包,但在构建cordova-plugin-camera中不包含类型的每个文件夹时会导致选项错误:
error TS2688: Cannot find type definition file for '.github'.
error TS2688: Cannot find type definition file for 'appium-tests'.
error TS2688: Cannot find type definition file for 'doc'.
error TS2688: Cannot find type definition file for 'jsdoc2md'.
error TS2688: Cannot find type definition file for 'src'.
error TS2688: Cannot find type definition file for 'tests'.
error TS2688: Cannot find type definition file for 'www'.使用./node_modules/cordova-plugin-camera/types而不是./node_modules/cordova-plugin-camera会导致TypeScript找不到类型,而使用./node_modules会导致没有类型的每个包的选项错误。
/// <reference types="cordova-plugin-camera" />使用✅
将/// <reference types="cordova-plugin-camera" />添加到我的一个TypeScript文件中,适用于cordova-plugin-camera和所有其他包,不会导致错误。但是,添加对任何一个TypeScript文件的引用(只要它包含在构建中,哪个文件并不重要)对我来说是不正确的。
还有其他方法我还没试过吗?解决这个问题的正确方法是什么?
发布于 2018-08-20 13:56:24
我相信/// <reference types="cordova-plugin-camera" />是正确的方法。您可以将其视为不使用模块的项目的import 'cordova-plugin-camera'的模拟。在任何一种情况下,您都必须任意选择一个文件来保存指令(或者,如果您愿意,可以将它放入多个文件中;这没有什么区别)。
开箱即用, packages are automatically included,所以如果您使用一个提供全局声明的非@types包,我想您应该使用/// <reference types="..."/>或import '...'。
发布于 2021-03-16 18:47:08
我的项目是角和使用Cordova包装的设备。我将不得不导入两个项目的库,角和科多瓦。我没有找到好的和干净的选项,所以我放弃了打字,使用了“声明”:
declare var Camera: any
declare var navigator: any
export const getPicture = () => new Promise((resolve, reject) => {
const options = {
quality: 50,
destinationType: Camera.DestinationType.DATA_URL
}
navigator.camera.getPicture(resolve, reject, options)
})就像一种魅力。
https://stackoverflow.com/questions/51930765
复制相似问题