使用 Typescript 的 Ionic 1 应用程序中的 Cordova 插件

Posted

技术标签:

【中文标题】使用 Typescript 的 Ionic 1 应用程序中的 Cordova 插件【英文标题】:Cordova plugins in Ionic 1 app using Typescript 【发布时间】:2016-04-21 15:19:32 【问题描述】:

我是 Typescript 的新手。我刚刚使用 Typescript 启动了一个 Ionic 1.2.4 (Angular) 项目。转译时,我收到错误消息Property 'Keyboard' does not exist on type 'CordovaPlugins',原因是在文件run.ts 中传递给angular.module.run() 的以下函数

///<reference path="../../typings/tsd.d.ts"/>

export function onRun($ionicPlatform) 
  $ionicPlatform.ready(function() 
    if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) 
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
      cordova.plugins.Keyboard.disableScroll(true);
    
    if (window.StatusBar) 
      StatusBar.styleDefault();
    
  )

cordova 插件实际上已经安装,它的类型定义文件肯定存在。这是文件tsd.d.ts

/// <reference path="angularjs/angular.d.ts" />
/// <reference path="cordova/cordova.d.ts" />
/// <reference path="cordova/plugins/BatteryStatus.d.ts" />
/// <reference path="cordova/plugins/Camera.d.ts" />
/// <reference path="cordova/plugins/Contacts.d.ts" />
/// <reference path="cordova/plugins/Device.d.ts" />
/// <reference path="cordova/plugins/DeviceMotion.d.ts" />
/// <reference path="cordova/plugins/DeviceOrientation.d.ts" />
/// <reference path="cordova/plugins/Dialogs.d.ts" />
/// <reference path="cordova/plugins/FileSystem.d.ts" />
/// <reference path="cordova/plugins/FileTransfer.d.ts" />
/// <reference path="cordova/plugins/Globalization.d.ts" />
/// <reference path="cordova/plugins/InAppBrowser.d.ts" />
/// <reference path="cordova/plugins/Keyboard.d.ts" />
/// <reference path="cordova/plugins/Media.d.ts" />
/// <reference path="cordova/plugins/MediaCapture.d.ts" />
/// <reference path="cordova/plugins/NetworkInformation.d.ts" />
/// <reference path="cordova/plugins/Push.d.ts" />
/// <reference path="cordova/plugins/Splashscreen.d.ts" />
/// <reference path="cordova/plugins/StatusBar.d.ts" />
/// <reference path="cordova/plugins/Vibration.d.ts" />
/// <reference path="cordova/plugins/WebSQL.d.ts" />
/// <reference path="ionic/ionic.d.ts" />
/// <reference path="jquery/jquery.d.ts" />

我还尝试将 Keyboard 的类型定义直接放在 run.ts 中。 ///&lt;reference path="../../typings/cordova/plugins/Keyboard.d.ts"/&gt;

我不希望插件实际注册,因为“cordova.js”在应用程序构建/打包之前不可用。但是,我想知道如何让 Typescript 通过 type defs 识别 Keyboard 实际上存在于 cordova.plugins 上。否则,如何在转译过程中避免这个错误?

【问题讨论】:

【参考方案1】:

安装打字稿定义时,我没有安装cordova-ionic。 “标准”cordova 键盘插件不同于 cordova-ionic 键盘插件。

tsd install cordova-ionic --save 解决了这个问题。

哎呀。

【讨论】:

typings 的等效命令:typings install dt~cordova-ionic --global --save

以上是关于使用 Typescript 的 Ionic 1 应用程序中的 Cordova 插件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Typescript 和 ionic 在嵌套数组中搜索

使用Typescript和ionic在嵌套数组中搜索

更新到 ionic-native 2.5.1 后的 ionic 2 Typescript 错误 TS1005

在 Ionic 2 中使用第三方 cordova 插件和 TypeScript

如何在使用 Typescript 的 Ionic App 上集成 API.AI?

Ionic 2:将 cordova 插件与具有自己命名空间的 Typescript 一起使用