【问题标题】:Get the Parameters of a Method from a Generic Class - TypeScript从泛型类中获取方法的参数 - TypeScript
【发布时间】:2021-07-10 18:55:34
【问题描述】:

我有一个带有两个方法的泛型类,其中一个调用另一个。由于两者都采用相同的参数,我试图使用Parameters Utility Type 将一个参数复制到另一个。但是,我不知道在访问类的方法时如何传递泛型:

class Thing<T> {
    _a: T;

    constructor(a: T) {
        this._a = a;
    }

    original(anotherA: T, b: string) {
        // do something...
    }

    unOriginal(...params: Parameters<typeof Thing.prototype.original>) {
        return this.original(...params);
    }
}

正如您在unOriginal 方法中看到的,我没有在任何地方传递通用T。因此,params 的计算结果为 [anotherA: any, b: string]。相反,我希望它评估为[anotherA: T, b: string],但我不知道在引用Thing.prototype.original 时如何传递T 泛型。例如,Parameters&lt;typeof Thing&lt;T&gt;.prototype.original&gt;

有什么想法吗?

【问题讨论】:

    标签: typescript generics visual-studio-code intellisense


    【解决方案1】:

    您需要使用Thing&lt;T&gt;["original"] 而不是typeof Thing.prototype.original

    class Thing<T> {
        _a: T;
    
        constructor(a: T) {
            this._a = a;
        }
    
        original(anotherA: T, b: string) {
            // do something...
        }
    
        unOriginal(...params: Parameters<Thing<T>["original"]>) {
            return this.original(...params);
        }
    }
    

    【讨论】:

    • 绝对解决了问题!但是你有什么信息说明为什么会这样以及有什么区别吗?谢谢!
    • 问题是您不能将泛型传递给使用typeof 创建的类型。此外,泛型在类本身上,因此如果您明白我的意思,您需要在该级别而不是 unOriginal 函数级别传递它
    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2023-04-02
    • 2022-11-29
    相关资源
    最近更新 更多