AnyColumn
Given a database type and a union of table names in that db, returns a union type with all possible column names.
Example:
interface Person {
id: number
}
interface Pet {
name: string
species: 'cat' | 'dog'
}
interface Movie {
stars: number
}
interface Database {
person: Person
pet: Pet
movie: Movie
}
type Columns = AnyColumn<Database, 'person' | 'pet'>
// Columns == 'id' | 'name' | 'species'
type AnyColumn<DB, TB extends keyof DB> = [T in TB]: keyof DB[T][TB] & string;