为默认导出模块编写声明文件

jul*_*n_c 25 typescript typescript-typings

我有一个名为RiveScript的npm模块,通常(在Javascript中)以这种方式实例化:

var RiveScript = require('rivescript');
var rivescript = new RiveScript();
Run Code Online (Sandbox Code Playgroud)

我正在尝试为模块编写一个声明文件,但是我在第一步陷入困境.这是我到目前为止所写的内容:

declare module "rivescript" {

    interface RivescriptOptions {
        utf8?: boolean;
    }

    class RiveScript {
        constructor(options?: RivescriptOptions);
    }

    export default RiveScript;
}
Run Code Online (Sandbox Code Playgroud)

然后我想在Typescript中我将以这种方式使用模块(默认导入):

import RiveScript from 'rivescript';
let rivescript = new RiveScript();
Run Code Online (Sandbox Code Playgroud)

但是,tsc生成它,因为它引用了一个default()函数,它是无效的:

const rivescript_1 = require('rivescript');
let rivescript = new rivescript_1.default();
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Pel*_*obs 36

你真的很亲密 而不是使用export default,你应该使用export =.

自定义分型/ rivescript.d.ts

declare module 'rivescript' {
  class RiveScript {
    constructor()
  }
  export = RiveScript
}
Run Code Online (Sandbox Code Playgroud)

app.js

import RiveScript = require('rivescript');
let rivescript = new RiveScript();
Run Code Online (Sandbox Code Playgroud)

有关如何编写声明文件的更多信息,您应该查看Typescript手册.例如.他们有一个"将模块作为一个类导出"模板.

  • 它有效,谢谢!我只是因为`import RiveScript = require('rivescript');`语法看起来不像是有效的ES6 import语句而感到困惑? (2认同)
  • 据我所知,`'rivescript'中的'import Rivescript`应该导入Rivescript的默认导出.但是,没有默认导出:https://github.com/aichaos/rivescript-js/blob/master/src/rivescript.coffee#L963.有关完整概述:https://github.com/Microsoft/TypeScript/issues/2242 (2认同)

Pau*_*erg 17

如果您正在寻找适用于默认导出函数的解决方案:

declare module "my-module" {
  function myFunction(foo: number): string;

  export default myFunction;
}
Run Code Online (Sandbox Code Playgroud)