如何在打字稿中的合并命名空间中覆盖函数

时间:2019-01-09 00:58:01

标签: typescript namespaces

让我们说我在.d.ts文件中定义了这样的命名空间:

from PyQt5 import QtCore, QtGui, QtWidgets

class ScrollAreaWheel(QtWidgets.QScrollArea):
    def wheelEvent(self, event):
        print("wheelEvent", event.angleDelta().y())

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setMinimumSize(1000, 400)

        frame1 = QtWidgets.QFrame(frameShape=QtWidgets.QFrame.StyledPanel)
        scrollarea1 = ScrollAreaWheel(widgetResizable=True)
        scrollarea1.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        scrollarea1.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        widget1 = QtWidgets.QWidget()
        scrollarea1.setWidget(widget1)
        label_lay = QtWidgets.QGridLayout(widget1)
        lay1 = QtWidgets.QVBoxLayout(frame1)
        lay1.addWidget(scrollarea1)

        pixmap = QtGui.QPixmap(200, 100)
        pixmap.fill(QtCore.Qt.red)
        label = QtWidgets.QLabel(pixmap=pixmap)
        label_lay.addWidget(label, 0, 0, QtCore.Qt.AlignCenter)

        #==============================

        frame2 = QtWidgets.QFrame(frameShape=QtWidgets.QFrame.StyledPanel)
        scrollarea2 = QtWidgets.QScrollArea(widgetResizable=True)
        scrollarea2.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        scrollarea2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        widget2 = QtWidgets.QWidget()
        scrollarea2.setWidget(widget2)

        splitter = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
        splitter.addWidget(frame1)
        splitter.addWidget(frame2)
        splitter.setSizes([600, 600])
        self.setCentralWidget(splitter)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

有没有一种方法可以覆盖hello()做其他事情?

当前,当我尝试覆盖它时,

namespace a.b.c {
   export function hello() { console.log('hello');}
}

尝试以下操作时收到错误消息:

  

错误TS2384:过载签名必须全部在环境或非环境中。

假设我无法更改.d.ts。

它不必很漂亮,但是最后,我需要能够打电话

namespace a.b.c {
    export function hello() {console.log('hi')}
}

并从新函数中获取值。

1 个答案:

答案 0 :(得分:2)

好吧,您说它不一定很漂亮。...对您有用吗?

namespace a.b.c {
    export function hello() {
        const elem = document.createElement("p");
        elem.innerText = "Hello";
        document.body.append(elem);
    }
}

a.b.c["hello"] = () => {
    const elem = document.createElement("p");
    elem.innerText = "HI!";
    document.body.append(elem);
}

a.b.c.hello();