我使用 cordova-plugin-camera
在我用 TypeScript ( 3.0.1
) 编写的基于 cordova 的应用程序中,我希望能够看到该插件的类型。
所以我安装了包 @types/cordova-plugin-camera
使用 npm。安装过程中 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 文件的引用(无论哪个文件都包含在构建中都无关紧要)对我来说似乎不合适。
还有没有其他方法我没试过? 解决此问题的正确方法是什么?
最佳答案
我相信/// <reference types="cordova-plugin-camera" />
是正确的做法。您可以将其视为 import 'cordova-plugin-camera'
的类比。对于不使用模块的项目。在任何一种情况下,您都必须任意选择一个文件来保存指令(或者您可以根据需要将其放在多个文件中;这没有区别)。
开箱即用,only @types
packages are automatically included , 所以如果你使用非 @types
提供全局声明的包,我猜你应该使用 /// <reference types="..."/>
或 import '...'
.
关于typescript - 如何让 TypeScript 加载 cordova 插件中包含的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51930765/