angular - Utöka tredjepartsbibliotek Typescript


Jag utvecklar ett Angular 5-projekt. Jag har refererat till ett tredjepartsbibliotek som laddats ner från NPM (odata-v4-ng). Jag behöver utöka en klass inuti detta bibliotek för att lägga till några metoder. Klassen är deklarerad så här.

export declare class ODataQuery extends ODataQueryAbstract {
  // methods omitted for brevity
}

Jag har försökt att utöka klassen på detta sätt:

import { ODataQuery } from 'odata-v4-ng';

declare module 'odata-v4-ng' {
  interface ODataQuery {
    test();
  }
}

ODataQuery.prototype.test = () => { };

Problemet är att kompilatorer kastar fel och säger "'ODataQuery' refererar endast till en typ, men används som ett värde här.". Om jag skapar en klass i mitt Angular-projekt och förstärker den på detta sätt, fungerar allt bra.

Någon idé?

Svar #1

Den specifika klassen är definierad i en annan modul och exporteras bara på nytt av huvudmodulen odata-v4-ng. Om du utökar den faktiska modulen där klassen är definierad verkar allt fungera bra:

import { ODataQuery } from 'odata-v4-ng';

declare module './node_modules/odata-v4-ng/src/app/odata/odata-query/odata-query' {
  export interface ODataQuery {
    test():void
  }
}

ODataQuery.prototype.test = () => { };