gpt4 book ai didi

typescript - 抽象类作为类型的实现

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:25 26 4
gpt4 key购买 nike

我想为我的类的属性定义一个类型:

abstract class CoolStuff {
protected abstract service: any;
}

这个服务也是一个抽象:

abstract class BaseService<T,K> {
// Code
}

所以我希望这样:

abstract class CoolStuff {
protected abstract service: BaseService
}

但是编译器希望我定义TK。但是这些已经在实现的服务中定义了:

class ActualService extends BaseService<Collection, Model>{
// Code
}

所以我想做的是:

abstract class CoolStuff {
protected abstract service: instanceof BaseService;
}

但是如何呢?

最佳答案

最好的方法是制作CoolStuff同样也是通用的,然后您可以在 CoolStuff 的派生类中指定实际类型

abstract class CoolStuff<T, K> {
protected abstract service: BaseService<T, K>;
}

class CoolStuffWithActualService extends CoolStuff<Collection, Model> {
protected service: ActualService
}

您也可以通过指定 any 来解决问题作为 CoolStuff 中的类型参数, 但这会导致基类中的类型较弱,因为它可以将任何内容传递给 BaseService这可能是个问题。

abstract class CoolStuff {
protected abstract service: BaseService<any, any>;
}

class CoolStuffWithActualService extends CoolStuff {
protected service: ActualService
}

编辑

第三种选择是将服务类型本身作为 CoolStuff 的类型参数并将其约束为 BaseService<any, any> 类型

abstract class CoolStuff<TService extends BaseService<any, any>> {
protected abstract service: TService
}

class CoolStuffWithActualService extends CoolStuff<ActualService> {
protected service!: ActualService
}

关于typescript - 抽象类作为类型的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51136745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com