首页 > 解决方案 > 具有不能是自身的泛型类型的打字稿类

问题描述

是否可以防止嵌套使用具有泛型类型参数的类,即Optional<Optional<string>>?示例类:

export default abstract class Optional<T> {
  abstract get hasValue(): boolean
  abstract get value(): T

  static of<U>(value: U): Optional<U> { return new FilledOptional<U>(value) }
  static empty<U>(): Optional<U> { return new EmptyOptional<U>() }
}

这个抽象类没有构造函数来限制实例的创建。FilledOptional和使用的EmptyOptionalof的确切实现empty似乎并不相关。

这是无效的:class Optional<T extends Optional<unknown> ? never : T>

有没有办法在全局类级别上实际做到这一点,或者我只需要用类似的类型约束来装饰这个类和相关类中的每个可能的方法参数?

刚才我意识到instanceof在方法中进行一些检查的可能性of,但这对方法没有帮助empty

或者,最好让这个类以任何可能的方式使用,即使(在我看来)直接嵌套Optional现在是我想在代码库中避免的反模式。

标签: typescripttypescript-genericstype-constraints

解决方案


推荐阅读