Write a declaration file for a default export module

前端 未结 2 1736
情歌与酒
情歌与酒 2020-12-14 06:32

I have a npm module called RiveScript that usually (in Javascript) gets instantiated that way:

var RiveScript = require(\'rivescript\');
var rivescript = new         


        
相关标签:
2条回答
  • 2020-12-14 06:42

    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.

    0 讨论(0)
  • 2020-12-14 06:51

    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    
    
    0 讨论(0)
提交回复
热议问题