私有属性和方法属于TypeScript定义文件吗?

时间:2014-11-12 10:47:57

标签: typescript

标题说明了一切。

我正在为JavaScript中的自定义项目创建一个新的d.ts文件。在其他项目中,我使用了第三方定义文件。有混合物。有些人包括私人财产和课程方法,而有些则没有。

有正确的方法吗?我认为私人元素的意图是让他们保持这种方式。但从技术上讲,任何人都可以正确覆盖私有元素(在JS中)?我也担心忽略它们,我会留下一些漏洞。例如,如果一个类有一个未定义的私有update()方法,那么我扩展该类,并编写一个update()方法。我觉得这里有冲突。

我很感激任何建议。

1 个答案:

答案 0 :(得分:1)

这取决于JavaScript实现,我会避免暴露不在原型上的私有成员。

假设我们有以下JavaScript:

var Example = (function () {
    var update = function() {
        alert('Private');
    }

    function Example() {
    }

    Example.prototype.doIt = function () {
        update();
    };
    return Example;
})();

如果我这样声明:

declare class Example {
    update(): void; // private
    doIt(): void;
}

看起来我可以从子类调用super.update(),但这会失败,因为超类上的update函数不在范围内。

在这种情况下,我会将其从声明中删除,以确保我防止此类错误(在运行时会发生)。

declare class Example {
    doIt(): void;
}

如果将update函数添加到原型中,则应将其添加到定义中(感谢Ryan的理由)。