打字稿根据用户输入创建新类型

时间:2019-12-08 01:22:14

标签: typescript generics user-input

在我的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属性中的每个项目都可以不同。它不会为每行强制使用相同的类型。

我该怎么做?

0 个答案:

没有答案