我有一个名为RiveScript的npm模块,通常(在Javascript中)以这种方式实例化:
var RiveScript = require('rivescript');
var rivescript = new RiveScript();
我正在尝试为模块编写一个声明文件,但是我在第一步陷入困境。这是我到目前为止所写的内容:
declare module "rivescript" {
interface RivescriptOptions {
utf8?: boolean;
}
class RiveScript {
constructor(options?: RivescriptOptions);
}
export default RiveScript;
}
然后我想在Typescript中我将以这种方式使用模块(默认导入):
import RiveScript from 'rivescript';
let rivescript = new RiveScript();
但是,tsc
生成此内容,因为它引用了default()
函数,因此无效:
const rivescript_1 = require('rivescript');
let rivescript = new rivescript_1.default();
我做错了什么?
答案 0 :(得分:0)
可接受的答案在此问题上效果很好。但我想提出另一个想法
如果要扩展类,请在运行时将动态方法添加到类中。
您可以尝试(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
}
}
在我的server.ts
(src / server.ts)中,
我的默认导出类签名
export default class Server extends extend implements Startable<void>
因为服务器是default export
,所以您可以将server
中的export default interface server
更改为任何有效的变量名称
例如:
export default interface anotherName
答案 1 :(得分:0)
如果您正在寻找适用于默认导出函数的解决方案:
declare module "my-module" {
function myFunction(foo: number): string;
export default myFunction;
}