Zhaowei
Zhaowei

Reputation: 323

how to export constructor in a declare module

I want use inline-style-prefixer like:

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

...

var prefixer = new InlineStylePrefixer(userAgent);


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

how to export constructor in a declare module?

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

Upvotes: 17

Views: 16546

Answers (2)

Louay Alakkad
Louay Alakkad

Reputation: 7408

You'd do two/three declares:

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

When you have a class and a module with the same name, the module is merged with the class.

Upvotes: 19

Arlo
Arlo

Reputation: 1351

I'm using TypeScript 2.0.10

Here's my definition that works for FuzzySearch, which I think is similar to what you want.

The default export is the class, which applies to this kind of import:
import * as FuzzySearch from 'fuzzy-search';

The trick is to declare the class and also a variable with the class as the value and make that variable the default export.

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;
}

If you import the class from the module, such as:

import { Thing } from 'thing-module';

thing-module.d.ts

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

Upvotes: 5

Related Questions