type AnyTableName = "foo" | "bar"
class ByIdQuery<T extends AnyTableName > extends Data.TaggedClass("ByIdQuery")<{
id: string
tableName: T
}> { }
class FooSpecificQuery extends Data.TaggedClass("FooSpecificQuery")<{ userId: string }> {
tableName = "foo" as const
}
type AnyQueryType<T extends AnyTableName> = ByIdQuery<T> | FooSpecificQuery
const resolveAny = <T extends AnyTableName>(query: AnyQueryType<T>): T => {
// Error: Type '"foo" | T' is not assignable to type 'T'.
// '"foo" | T' is assignable to the constraint of type 'T',
// but 'T' could be instantiated with a different subtype of constraint 'AnyTableName'.
return query.tableName
}
type AnyTableName = "foo" | "bar"
class ByIdQuery<T extends AnyTableName > extends Data.TaggedClass("ByIdQuery")<{
id: string
tableName: T
}> { }
class FooSpecificQuery extends Data.TaggedClass("FooSpecificQuery")<{ userId: string }> {
tableName = "foo" as const
}
type AnyQueryType<T extends AnyTableName> = ByIdQuery<T> | FooSpecificQuery
const resolveAny = <T extends AnyTableName>(query: AnyQueryType<T>): T => {
// Error: Type '"foo" | T' is not assignable to type 'T'.
// '"foo" | T' is assignable to the constraint of type 'T',
// but 'T' could be instantiated with a different subtype of constraint 'AnyTableName'.
return query.tableName
}