Reputation: 5092
I have a npm module called RiveScript that usually (in Javascript) gets instantiated that way:
var RiveScript = require('rivescript');
var rivescript = new RiveScript();
I'm trying to write a declaration file for the module, but am stuck at the first step. Here's what I've written so far:
declare module "rivescript" {
interface RivescriptOptions {
utf8?: boolean;
}
class RiveScript {
constructor(options?: RivescriptOptions);
}
export default RiveScript;
}
Then I guess in Typescript I would be using the module this way (default import):
import RiveScript from 'rivescript';
let rivescript = new RiveScript();
However, tsc
generates this, which is not valid as it references a default()
function:
const rivescript_1 = require('rivescript');
let rivescript = new rivescript_1.default();
What am I doing wrong?
Upvotes: 64
Views: 58802
Reputation: 21348
In case you were looking for a solution applicable to default exported functions:
declare module "my-module" {
function myFunction(foo: number): string;
export default myFunction;
}
Upvotes: 20
Reputation: 2579
You're really close. Instead of using export default
, you should use export =
.
custom-typings/rivescript.d.ts
declare module 'rivescript' {
class RiveScript {
constructor()
}
export = RiveScript
}
app.js
import RiveScript = require('rivescript');
let rivescript = new RiveScript();
For more info on how to write declaration files, you should have a look at the Typescript Handbook. Eg. they have a template for 'exporting modules as a class.
Upvotes: 90
Reputation: 3381
Accepted anwser works well for this question. But I want to give another idea
if you want to extends class, add dynamic method to class at runtime.
you can try (src/plugins/processor.ts)
import server from '../../server'
declare module "../../server"{
export default interface server{
process() // it's a new method of server
}
}
export default class{ //another codes, just for show I create a 'server' instance
private instance:server
constructor{
this.instance = new server()
this.instance.process() //works
}
}
in my server.ts
(src/server.ts),
my default export class signature
export default class Server extends extend implements Startable<void>
Because Server is a default export
, so you can change server
in export default interface server
to any valid variable name
for example:
export default interface anotherName
Upvotes: -1