在我的UI中,用户可以创建数据库。他们列出了列及其类型。我在类型系统中很难表达这一点。
我可以这样做:
interface Database<T> {
name: string
data: T[]
}
或进一步指定通用名称:
interface Database<DatabaseType> {
...
}
type DatabaseType
= { name: string, surname: string }
| { time: number, revenue: number };
但是我不知道如何让用户定义“ DatabaseType”并在类型系统中强制执行。由于Typescript是编译时工具,这是否有可能?
我已经考虑过以某种方式使用fixed-length tuples,但不确定如何使用。
希望得到一些指导!
编辑:更多信息/代码
我这样代表了用户创建的数据库:
type Column
= { type: "string", data: string }
| { type: "number", data: number }
| { type: "datetime", data: Date }
type Row = Column[]
interface Database {
name: string
data: Row[]
}
用户选择Column
的列表来建立数据库。
我不喜欢这样做,因为data
属性中的每个项目都可以不同。它不会为每行强制使用相同的类型。
我该怎么做?