记录类型,其中值与定义的接口相同但作为数组

Record type where values are the same as a defined interface but as an array

我有一个接口,其中所有属性都有一个基本类型:

interface Types {
    a: number,
    b: string,
    c: boolean
}

我想要一个 Database 类型,它看起来与 Types 接口相同,但类型是数组而不是基本类型。

像这样(这只是一种表示,因为这将是一个构造类型):

{
    a: number[],
    b: string[],
    c: boolean[]
}

我试过的是:

type Database<Key extends keyof Types> = Record<Key, Array<Types[Key]>>

我认为泛型类型将是一个“静默类型”,但实际上当我想使用 Database 类型时我必须将它作为一个参数给出...而这不是我想要的。

我希望 Database 类型可以按原样使用。


解决方案:

interface Types {
    a: number,
    b: string,
    c: boolean
}

type ValueToArray<T> = {
  [K in keyof T]: Array<T[K]>;
};

type Database = ValueToArray<Types>;

使用mapped types

type ValueToArray<T> = {
  [K in keyof T]: Array<T[K]>;
};