TS2339: Свойство «контакты» не существует для типа «Навигатор» - PullRequest
0 голосов
/ 26 марта 2019

Я пытаюсь создать приложение для контактов, которое использует плагины Apache Cordova для контактов.При попытке выполнить команду npm run bundle для моего приложения она выдает ошибку в названии выше.Как мне решить эту проблему?

Я пытался обновить свои зависимости в моем package.json до различных версий, и я также пытался избавиться от "module": "commonjs" в моем tsconfig.webpack.json, но это не сработало.

===========
// index.ts
===========

export class CordovaApp{
    constructor(){
        document.getElementById('findContactButton').addEventListener('click', this.onfindContactButtonClick);
    }

    onfindContactButtonClick(){
        const searchText = (<HTMLInputElement>document.getElementById('searchText')).value;
        let fields = [navigator.contacts.fieldType.displayName, navigator.contacts.fieldType.name];

        navigator.contacts.find(fields, (contacts) => {
            var ul = document.getElementById('contacts');
            contacts.forEach(function (contact) {
                var li = document.createElement('li');
                li.className = 'collection-item';
                li.innerText = contact.displayName;
                ul.appendChild(li);
            });
        }, (error) => {
            alert(error);
        },
        {
            filter: searchText, multiple: true,
            desiredFields: [navigator.contacts.fieldType.displayName]        
        });

        return false;
    }
}

let instance = new CordovaApp()
===========
// index.js
===========
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var CordovaApp = (function () {
    function CordovaApp() {
        document.getElementById('findContactButton').addEventListener('click', this.onfindContactButtonClick);
    }
    CordovaApp.prototype.onfindContactButtonClick = function () {
        var searchText = document.getElementById('searchText').value;
        var fields = [navigator.contacts.fieldType.displayName, navigator.contacts.fieldType.name];
        navigator.contacts.find(fields, function (contacts) {
            var ul = document.getElementById('contacts');
            contacts.forEach(function (contact) {
                var li = document.createElement('li');
                li.className = 'collection-item';
                li.innerText = contact.displayName;
                ul.appendChild(li);
            });
        }, function (error) {
            alert(error);
        }, {
            filter: searchText, multiple: true,
            desiredFields: [navigator.contacts.fieldType.displayName]
        });
        return false;
    };
    return CordovaApp;
}());
exports.CordovaApp = CordovaApp;
var instance = new CordovaApp();
//# sourceMappingURL=index.js.map
===========
// package.json
===========
"dependencies": {
        "cordova-android": "^6.2.3",
        "cordova-browser": "^4.1.0",
        "cordova-ios": "^4.4.0",
        "cordova-plugin-compat": "^1.0.0",
        "cordova-plugin-contacts": "^3.0.1",
        "cordova-plugin-whitelist": "^1.3.2"
    },
    "devDependencies": {
        "@types/cordova": "^0.0.34",
        "@types/cordova-plugin-contacts": "^2.3.0",
        "typescript": "^2.4.1",
        "webpack": "^1.14.0",
        "webpack-dev-server": "^1.16.2",
        "ts-loader": "1.3.3",
        "html-loader": "0.4.4",
        "css-loader": "0.26.1",
        "awesome-typescript-loader": "^3.2.1"
    }
===========
// Running Command prompt
===========
npm run bundle

[at-loader] Checking started in a separate process...

[at-loader] Checking finished with 4 errors
Hash: 52c5912a7e1b4f149e40
Version: webpack 1.15.0
Time: 1014ms
               Asset     Size  Chunks             Chunk Names
./www/dist/bundle.js  7.51 kB       0  [emitted]  main
    + 1 hidden modules

ERROR in [at-loader] ./www/js/index.ts:8:33
    TS2339: Property 'contacts' does not exist on type 'Navigator'.

ERROR in [at-loader] ./www/js/index.ts:8:75
    TS2339: Property 'contacts' does not exist on type 'Navigator'.

ERROR in [at-loader] ./www/js/index.ts:10:19
    TS2339: Property 'contacts' does not exist on type 'Navigator'.

ERROR in [at-loader] ./www/js/index.ts:23:39
    TS2339: Property 'contacts' does not exist on type 'Navigator'.

Код должен правильно связываться, и я не должен иметь ошибок.

1 Ответ

0 голосов
/ 20 апреля 2019

Вам необходимо добавить следующую строку в src / tsconfig.json в свойстве «files»:

"../plugins/cordova-plugin-contacts/types/index.d.ts"

После этого вам нужно перезапустить запущенную команду «ionic serve» (или просто перестроить ее).).

В конце концов файл src / tsconfig.json должен выглядеть так:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/spec",
    "types": [
      "jasmine",
      "node"
    ]
  },
  "files": [
    "test.ts",
    "polyfills.ts",
    "../plugins/cordova-plugin-contacts/types/index.d.ts"
  ],
  "include": [
    "**/*.spec.ts",
    "**/*.d.ts"
  ]
}

Надеюсь, это поможет вам.Обратите внимание, что это решение для Ionic 4. Ionic 3 или ниже может отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...