【问题标题】:Type 'FileOriginal' is not assignable to type 'Provider' when trying to use Native File in Ionic尝试在 Ionic 中使用本机文件时,类型“FileOriginal”不可分配给类型“Provider”
【发布时间】:2020-10-22 01:24:43
【问题描述】:

我正在尝试将 PDFMaker 用于我的 Ionic 5 项目。 1 先决条件是使用 Native File 和 FileOpener。当我尝试导入模块时,出现以下错误:

类型“FileOriginal”不可分配给类型“Provider”。

app.module

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { QRScanner } from '@ionic-native/qr-scanner/ngx';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { SideMenuComponent } from './components/side-menu/side-menu.component';
import { HttpClientModule, HttpClient } from '@angular/common/http';
import { IonicStorageModule } from '@ionic/storage';

import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

import { Camera } from '@ionic-native/camera/ngx';
import { ImageResizer } from '@ionic-native/image-resizer/ngx';
import { InAppBrowser } from '@ionic-native/in-app-browser/ngx';
import { Network } from '@ionic-native/network/ngx';
import { File } from '@ionic-native/file/ngx';
export function createTranslateLoader(http: HttpClient) {
  return new TranslateHttpLoader(http, '/assets/i18n/', '.json');
}

@NgModule({
  declarations: [AppComponent, SideMenuComponent],
  entryComponents: [],
  imports: [
    BrowserModule,
    IonicModule.forRoot(),
    AppRoutingModule,
    HttpClientModule,
    IonicStorageModule.forRoot(),
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: (createTranslateLoader),
        deps: [HttpClient]
      }
    })
  ],
  providers: [
    Camera,
    File,
    InAppBrowser,
    ImageResizer,
    StatusBar,
    Network,
    SplashScreen,
    QRScanner,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
  ],
  bootstrap: [AppComponent],
})
export class AppModule {}

package.json

{
  "name": "revApp",
  "version": "0.0.1",
  "author": "Kieran McCarthy",
  "homepage": "https://ionicframework.com/",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "karma start karma.conf.js",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "generate": "node ./server/generate.js > ./server/database.json",
    "server": "json-server --host 192.168.1.10 --watch ./server/database.json"
  },
  "private": true,
  "dependencies": {
    "@angular/common": "~8.2.14",
    "@angular/core": "~8.2.14",
    "@angular/forms": "~8.2.14",
    "@angular/platform-browser": "~8.2.14",
    "@angular/platform-browser-dynamic": "~8.2.14",
    "@angular/router": "~8.2.14",
    "@ionic-native-mocks/camera": "^2.0.12",
    "@ionic-native/camera": "^5.26.0",
    "@ionic-native/core": "^5.27.0",
    "@ionic-native/file": "^5.27.0",
    "@ionic-native/file-opener": "^5.27.0",
    "@ionic-native/image-resizer": "^5.26.0",
    "@ionic-native/in-app-browser": "^5.27.0",
    "@ionic-native/network": "^5.27.0",
    "@ionic-native/qr-scanner": "^5.25.0",
    "@ionic-native/splash-screen": "^5.0.0",
    "@ionic-native/status-bar": "^5.0.0",
    "@ionic/angular": "^5.0.0",
    "@ionic/storage": "^2.2.0",
    "@ngrx/store": "github:ngrx/store",
    "@ngx-translate/core": "^12.1.2",
    "@ngx-translate/http-loader": "^4.0.0",
    "@types/pouchdb": "6.4.0",
    "cordova-android": "^8.1.0",
    "cordova-plugin-camera": "^4.1.0",
    "cordova-plugin-file": "^6.0.2",
    "cordova-plugin-file-opener2": "^3.0.2",
    "cordova-plugin-inappbrowser": "^4.0.0",
    "cordova-plugin-network-information": "^2.0.2",
    "cordova-plugin-qrscanner": "^3.0.1",
    "cordova-plugin-sqlite-2": "^1.0.6",
    "core-js": "^2.5.4",
    "faker": "^4.1.0",
    "info.protonet.imageresizer": "^0.1.1",
    "json-server": "^0.16.1",
    "lodash": "^4.17.15",
    "lokijs": "^1.5.8",
    "moment": "^2.26.0",
    "pdfmake": "^0.1.66",
    "pouchdb": "^7.2.1",
    "pouchdb-adapter-cordova-sqlite": "^2.0.7",
    "rxjs": "~6.5.1",
    "tslib": "^1.9.0",
    "uuid": "^8.1.0",
    "zone.js": "~0.9.1"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.803.20",
    "@angular/cli": "~8.3.23",
    "@angular/compiler": "~8.2.14",
    "@angular/compiler-cli": "~8.2.14",
    "@angular/language-service": "~8.2.14",
    "@ionic/angular-toolkit": "^2.1.1",
    "@testing-library/angular": "^9.2.2",
    "@types/jasmine": "~3.3.8",
    "@types/jasminewd2": "~2.0.3",
    "@types/lodash": "^4.14.154",
    "@types/node": "12.12.31",
    "codelyzer": "^5.0.0",
    "cordova-plugin-device": "^2.0.2",
    "cordova-plugin-ionic-keyboard": "^2.2.0",
    "cordova-plugin-ionic-webview": "^4.2.1",
    "cordova-plugin-splashscreen": "^5.0.2",
    "cordova-plugin-statusbar": "^2.4.2",
    "cordova-plugin-whitelist": "^1.3.3",
    "jasmine-core": "~3.4.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~4.1.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage": "~2.0.2",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~2.0.1",
    "karma-jasmine-html-reporter": "^1.4.0",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.15.0",
    "typescript": "~3.9.2"
  },
  "description": "An Ionic project",
  "cordova": {
    "plugins": {
      "cordova-plugin-qrscanner": {},
      "cordova-plugin-sqlite-2": {},
      "cordova-plugin-whitelist": {},
      "cordova-plugin-statusbar": {},
      "cordova-plugin-device": {},
      "cordova-plugin-splashscreen": {},
      "cordova-plugin-ionic-webview": {
        "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
      },
      "cordova-plugin-ionic-keyboard": {},
      "cordova-plugin-camera": {
        "ANDROID_SUPPORT_V4_VERSION": "27.+"
      },
      "info.protonet.imageresizer": {},
      "cordova-plugin-inappbrowser": {},
      "cordova-plugin-network-information": {},
      "cordova-plugin-file-opener2": {},
      "cordova-plugin-file": {}
    },
    "platforms": [
      "android"
    ]
  }
}

我已尝试卸载 File 包并重新安装。没有运气。

【问题讨论】:

  • 我刚刚删除了整个 node_modules 文件夹并再次安装了依赖项,但仍然没有。我知道很多这类问题都可以通过在末尾添加 /ngx 来解决,但这仍然对我不起作用。
  • 呃,我不知道是怎么做到的,但我让它工作了。我尝试将其导入应用程序的其他位置,然后将其重新导入 app.module。我采取的步骤是卸载所有依赖项并再次安装。如果问题仍然存在,请在其他地方导入。也许它会让编译器重新开始行动以纠正自己。
  • 更具体地说,添加到组件类,而不是模块。然后放回app.module。只是把它留在这里,因为我花了 3 个小时的时间,我不会再回到这个问题上 xD

标签: angular typescript ionic-framework ionic4


【解决方案1】:

如果您使用 @ionic-native/file 而不使用 /ngx 在任何组件中导入(或提供)文件,则可能会发生这种情况

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2018-07-01
    • 2018-06-27
    相关资源
    最近更新 更多