Reputation: 323
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
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
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