我有一个名为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中,我会这样使用模块(default import):

import RiveScript from 'rivescript';
let rivescript = new RiveScript();

但是,tsc会生成这个函数,因为它引用了default()函数,所以无效:

const rivescript_1 = require('rivescript');
let rivescript = new rivescript_1.default();

我做错了什么?

推荐答案

你真的很接近.你应该使用export =而不是export default.

custom-typings/rivescript.d.ts

declare module 'rivescript' {
  class RiveScript {
    constructor()
  }
  export = RiveScript
}

app.js

import RiveScript = require('rivescript');
let rivescript = new RiveScript();

有关如何编写声明文件的更多信息,请参阅Typescript Handbook.他们有一个"将模块作为类导出"的模板.

Typescript相关问答推荐

类型缩小对(几乎)受歧视的unions 不起作用

当使用`type B = A`时,B的类型显示为A.为什么当`type B = A时显示为`any `|用A代替?

具有动态键的泛型类型

material 表不渲染任何数据

适当限制泛型函数中的记录

缩小并集子键后重新构造类型

如何在Reaction Query Builder中添加其他字段?

从对象类型描述生成类型

如何通过TypeScrip中的函数防止映射类型中未能通过复杂推理的any值

通过泛型函数本身推断受约束的泛型参数的类型脚本问题

TypeScrip:强制使用动态密钥

为什么TypeScrip不能解析对象析构中的赋值?

是否可以通过映射类型将函数参数约束为预定义类型?

如何在具有嵌套数组的接口中允许新属性

如何从JWT Reaction中提取特定值

两个名称不同的相同打字界面-如何使其干燥/避免重复?

为什么受歧视的unions 在一种情况下运作良好,但在另一种非常类似的情况下却不起作用?

如何以类型安全的方式指定键的常量列表,并从该列表派生所挑选的接口?

在tabel管理区域react js上设置特定顺序

如何将元素推入对象中的类型化数组