2016-08-23 79 views
5

我有一个名为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; 
} 

然后我打字稿想我会使用模块这种方式(默认导入):

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

然而,tsc产生这一点,这是无效的,因为它引用一个default()功能:

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

我在做什么错?

回答

8

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

定制分型/ rivescript.d.ts

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

app.js

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

有关如何编写申报文件的更多信息,你应该看看Typescript Handbook。例如。他们有一个template for 'exporting modules as a class'

+1

它的工作原理,谢谢! 我只是混淆了'import RiveScript = require('rivescript');'语法看起来不像一个有效的ES6导入语句的事实? –

+0

据我所知,'从rivescript'导入Rivescript应该导入Rivescript的默认导出。但是,没有默认导出:https://github.com/aichaos/rivescript-js/blob/master/src/rivescript.coffee#L963。有关完整的概述:https://github.com/Microsoft/TypeScript/issues/2242 –

+0

好吧,明白了,谢谢! –