typescript - 在 TypeScript 中扩展而不覆盖模块

标签 typescript

假设我想扩展一个模块。同时我不想覆盖它的属性。在 JavaScript 中我会这样做:

var root = this; // window
(function(exports) {
    if ('widget' in exports) return;

    function widget() {
        //
    }

    exports.widget = widget;

})(root.library || (root.library = {}));

似乎 TypeScript 提供了相同的使用 module。但是以下列方式使用它会不加区别地覆盖之前在 library 上定义的任何 widget 属性:

module library {
    export function widget() {
        //
    }
}

现在我可以使用前者,但如果我在函数内部创建一个 class 定义,TypeScript 会提示嵌套。如果我将定义放在函数之外,那么它就会被导出(比如在 window 上),这是我想要避免的。

有什么想法吗?

最佳答案

你可以用 vars 来做到这一点:

module library {
    export var  widget = function () {
        //
    }
}

module library{
    if(library.widget){
        return;
    }
    else{
        library.widget = function(){            
        }   
    }   
}

Try it.

关于typescript - 在 TypeScript 中扩展而不覆盖模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332380/

相关文章:

javascript - 从对象集合中的项目的 lodash.find 方法获取未定义

javascript - 如何使用 javascript 对象中的构造函数来仅使用 `this` 中的属性?

typescript - 参数中的泛型和typeof T

javascript - 如何使用 TypeScript 创建 AngularJs 提供程序

reactjs - 如何使用 VS Code devcontainers 在react.js 中设置热重载

javascript - 为什么尝试在 react 中使用 ref 时 typescript 会提示?

arrays - TypeScript:reduce 函数 - 没有重载匹配这个调用

javascript - 如何推送设置了特定状态的数据?

javascript - typescript 类型 boolean 不能分配给 void

Javascript:将 JSON 字符串转换为 ES6 映射或其他以保留键的顺序