typescript - hur man exporterar en konstruktor i en deklarationsmodul


Jag vill använda inline-style-prefixer som:

var InlineStylePrefixer = require('inline-style-prefixer');

...

var prefixer = new InlineStylePrefixer(userAgent);


...
var _style = InlineStylePrefixer.prefixAll(style);

hur man exporterar en konstruktor i en declare-modul?

declare module "inline-style-prefixer"{
    export function InlineStylePrefixer(useagent:string):void; // error
    export function prefixAll(style:Object):Object;
}

Svar #1

Du skulle göra två/tre deklarationer:

declare class InlineStylePrefixer {
  constructor(useagent: string) {}
}
declare module InlineStylePrefixer {
    export function prefixAll(style: Object): Object;
}
declare module "inline-style-prefixer" {
  export = InlineStylePrefixer;
}

När du har en klass och en modul med samma namn, slås modulen ihop med klassen.

Svar #2

Jag använder TypeScript 2.0.10

Här är min definition som fungerar för FuzzySearch, vilket jag tror är liknande det du vill ha.

Standardexporten är klassen, som gäller för denna typ av import:
import * as FuzzySearch from 'fuzzy-search';

Tricket är att deklarera klassen och också en variabel med klassen som värde och göra den variabeln till standardexport.

fuzzy-search.d.ts

interface FuzzyOptions {
    caseSensitive?: boolean;
    sort?: boolean;
}

declare class FuzzySearch<T> {
    constructor(haystack: T[], keys: string[], options?: FuzzyOptions);
    search(needle: string): T[];
}

declare var fuzzySearchClass = FuzzySearch;

declare module 'fuzzy-search' {
    export = fuzzySearchClass;
}

Om du importerar klassen från modulen, till exempel:

import { Thing } from 'thing-module';

thing-module.d.ts

declare module 'thing-module' {
  declare class Thing {
    constructor(someArg: number);
    doSomething(): string;
  }
}

Relaterade artiklar