首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让TypeScript加载包含在cordova插件中的类型

如何让TypeScript加载包含在cordova插件中的类型
EN

Stack Overflow用户
提问于 2018-08-20 12:27:15
回答 2查看 5.5K关注 0票数 10

我在用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中的使用

添加

代码语言:javascript
复制
"types": [ 
  "cordova-plugin-camera" 
]

tsconfig.jsoncordova-plugin-camera工作,但会导致TypeScript停止加载所有其他包的类型,因此我必须将每个带有类型的包添加到tsconfig.json中。

typeRoots属性在tsconfig.json中的使用

添加

代码语言:javascript
复制
"typeRoots": [
  "./node_modules/@types",
  "./node_modules/cordova-plugin-camera"
]

tsconfig.json适用于cordova-plugin-camera和其他包,但在构建cordova-plugin-camera中不包含类型的每个文件夹时会导致选项错误:

代码语言:javascript
复制
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文件的引用(只要它包含在构建中,哪个文件并不重要)对我来说是不正确的。

还有其他方法我还没试过吗?解决这个问题的正确方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-20 13:56:24

我相信/// <reference types="cordova-plugin-camera" />是正确的方法。您可以将其视为不使用模块的项目的import 'cordova-plugin-camera'的模拟。在任何一种情况下,您都必须任意选择一个文件来保存指令(或者,如果您愿意,可以将它放入多个文件中;这没有什么区别)。

开箱即用, packages are automatically included,所以如果您使用一个提供全局声明的非@types包,我想您应该使用/// <reference types="..."/>import '...'

票数 7
EN

Stack Overflow用户

发布于 2021-03-16 18:47:08

我的项目是角和使用Cordova包装的设备。我将不得不导入两个项目的库,角和科多瓦。我没有找到好的和干净的选项,所以我放弃了打字,使用了“声明”:

代码语言:javascript
复制
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)
})

就像一种魅力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51930765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档