0

typescript 是否提供任何方法来获取以通用方式正确键入的可调用构造函数?

下面的代码有效,但有一些问题。似乎您不能通过声明类或接口来修改构造函数的返回类型。我试图玩弄一个mixin,但无法让它工作。

interface Callable<T> {
    (): T;
    (value:T): this;
}

declare class O<T> {
    constructor(value:T);
}

function O<T>(value:T) : Callable<T> {

    let _value = value;

    // can we get rid of this cast ? 
    const callable = <Callable<T>> function(value?:T){
        if(value === undefined){
            return _value;
        }
        
        _value = value;
        return callable;
    };

    Object.setPrototypeOf(callable, O.prototype);

    return callable;
}

// can we get rid of this cast and/or make it generic ? 
const instance = new O(false) as Callable<boolean>;
const a = instance(); // false
instance(true);
const b = instance(); // true
const c = instance instanceof O; // true

很确定还有其他改进可以随时发表评论

4

0 回答 0