继承类的不同返回类型

时间:2017-05-22 07:17:16

标签: javascript class typescript interface callback

假设我有A和B类.A定义B可能使用的所有东西。 A不知道,B使用时某些回调参数可能具有什么类型。所以在A中它们被定义为Object。

class A {

    private _on_user_selection:(selection:Object) => void = $.noop;

    set on_user_selection(fn:(selection:Object) => void) {
        if ($.isFunction(fn)) {
            this._on_user_selection = fn;
        }
    }
}

class B extends A {
    // ...
}

B知道作为回调参数会发生什么。现在我需要在B中做什么,以便我可以像这样使用它:

let b = new B();
b.on_user_selection = (selection:SomeInterfaceDefindeSomewhere):void => {
    // ...
};

在这种情况下,上面的工作会很好,但是我想修复B中的回调返回类型,而不仅仅是它实际调用的地方。

1 个答案:

答案 0 :(得分:1)

您可以A通用:

class A<T> {
    private _on_user_selection: (selection: T) => void = $.noop;

    set on_user_selection(fn: (selection: T) => void) {
        if ($.isFunction(fn)) {
            this._on_user_selection = fn;
        }
    }
}

class B extends A<SomeInterfaceDefindeSomewhere> {
    // ...
}

此外,请勿使用Objectinstead use anynew object type类型。