Невозможно объявить метод расширения для приложения (ионно-угловой) - PullRequest
0 голосов
/ 08 октября 2018

В моем /ext/app-entension.ts ("typcript": "^ 2.4.2") я объявляю функцию расширения для класса App (ионно-углового):

// **error #1** from the list below
import { NavController, App } from "ionic-angular"; 

interface App {
    getMyCoolNav(): NavController;
}

// **error #2** from the list below
App.prototype.getMyCoolNav = function(this: App): NavController {
    // logic to define suitable nav combining the following calls
    // this.getRootNavs && this.getActiveNavs
    // **error #3** from the list below
}

И в моемСтраницы Я могу просто импортировать это расширение и использовать его без каких-либо проблем:

import { NavController, App } from "ionic-angular";
import '../ext/app-extensions'

// **error #4** from the list below
this.app.getMyCoolNav().push(MyCoolPage);

Он отлично работает во время выполнения, в то время как VS Code / Typescript доставляет мне неприятности со всеми видами ошибок:

  1. import: [ts] Объявление импорта конфликтует с локальным объявлением «App».
  2. Назначение прототипа: [ts] Свойство «getMyCoolNav» не существует для типа «App».
  3. this использование в прототипе: [ts] Свойство 'getRootNavs' не существует в типе 'App'.
  4. на моих страницах: [ts] Свойство 'getMyCoolNav' не существует в типе 'App'.

Что может быть не так с моей регистрацией метода расширения?

1 Ответ

0 голосов
/ 09 октября 2018

Вам нужно дополнить модуль интерфейсом, чтобы сообщить компилятору о новом интерфейсе.например,

Файл test.ts

export class Test {
    getSomething(): string {
        return "something";
    }
}

Файл testExtensions.ts

import { Test } from "./test";

declare module "./test" {
    interface Test {
        getSomethingElse(): string;
    }
}

Test.prototype.getSomethingElse = function(): string {
    return "somethingElse";
}

Это говорит компилятору об интерфейсе, и вы сможете расширить прототиппо мере необходимости.См. https://www.typescriptlang.org/docs/handbook/declaration-merging.html, для поиска «Расширение модуля»

...