【问题标题】:Typescript: Return "this" from generic base class打字稿:从通用基类返回“this”
【发布时间】:2017-01-15 01:00:14
【问题描述】:

我想从基类返回“this”作为泛型类型参数。

class ExampleClass<T> {
    public returnThis = (): T => {
        return <T>this;
    }
}

我知道我不能转换为 T,因为 typescript 不知道 T 派生自 ExampleClass。
但是有没有办法做到这一点?

【问题讨论】:

    标签: generics typescript derived-class


    【解决方案1】:

    你可以只返回类型this:

    class ExampleClass<T> {
        public returnThis = (): this => {
            return this;
        }
    }
    

    文档的Polymorphic this types 部分对此进行了介绍。


    编辑

    不,它会返回实际实例的类型,例如:

    class BaseClass {
        public returnThis(): this {
            return this;
        }
    }
    
    class ExampleClass extends BaseClass {}
    
    let base = new BaseClass();
    let base2 = base.returnThis(); // base2 instanceof BaseClass
    
    let example = new ExampleClass();
    let example2 = example.returnThis(); // example2 instanceof ExampleClass 
    

    (code in playground)

    【讨论】:

    • 但是返回类型是 ExampleClass。有没有办法让返回类型为 T?
    • 哦,好吧,我还是用一个例子修改了我的答案:)
    • 另外,我建议不要使用这样的实例方法(使用箭头函数),而是在原型上定义它们。否则您将无法覆盖该方法并调用super
    • 所以不能覆盖基类中的箭头函数?不知道,再次感谢;)
    • 是的,那是因为箭头函数是在构造函数中添加到实例中的,而不是添加到原型中的。你可以在 SO 中找到一些关于它的问题,例如:stackoverflow.com/questions/23218959/…
    猜你喜欢
    • 2019-04-25
    • 2015-10-07
    • 2018-07-01
    • 2023-02-07
    • 2020-05-27
    • 2021-05-16
    • 2020-06-29
    • 2021-09-18
    相关资源
    最近更新 更多