gpt4 book ai didi

generics - TypeScript 中静态方法的抽象方法版本

转载 作者:行者123 更新时间:2023-12-03 23:21:12 30 4
gpt4 key购买 nike

我正在使用 typescript 创建数据模型范例。我将不同类型的数据存储在不同的地方(SQL、本地缓存)。我想创建一个抽象类,其中包含任何类型的数据存储(创建、查找、更新、计数、销毁)所需的所有方法。通过这种方式,我可以扩展该类并针对不同类型的存储以不同的方式实现它,如果我缺少某个方法,编译器会警告我。然后,我将在描述数据模型的类中扩展这些实现之一。但是,我需要的一些方法(例如 find 和 create)是静态的。我知道 typescript 不支持抽象静态方法。是否有类似于我可以使用的抽象方法的东西,以便编译器警告我缺少方法?

我还希望这些静态方法是通用的,并且类型与类相同。我知道这对于标准的泛型类没有意义。但是,由于这个类将始终被扩展并且永远不会被实例化,我是否可以在扩展时键入泛型类,自动更新静态方法上的泛型类型?

最佳答案

Is there something similar to abstract methods I could use so the compiler warns me about missing methods



不是内置的,所以你不会简单地得到好的错误
// WILL NOT COMPILE. SAMPLE
class Foo {
abstract static X() { }
}

class Bar extends Foo { // Error here please
}

但是,您可以使用类型兼容性等技巧来确保:
interface FooAbstract {
X(): any;
}
let _ensureAbstractMatch: FooAbstract;
class Foo {
}

class Bar extends Foo {
}
_ensureAbstractMatch = Bar; // Error missing method

示例实现:
interface FooAbstract {
X(): any;
}
let _ensureAbstractMatch: FooAbstract;
class Foo {
}

class Bar extends Foo {
static X() { }
}
_ensureAbstractMatch = Bar; // OKAY

关于generics - TypeScript 中静态方法的抽象方法版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39690133/

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