首页 > 解决方案 > 结果作为对象,其中键是数组中的每个值

问题描述

我试图弄清楚如何定义primaryKey它是一个对象的结果,并且每个键都是数组中的一个值$primaryKey。但是我不确定如何做到这一点。我不认为我可以keyof this.$primaryKey像我尝试的那样使用并得到一个错误。如何(如果可能)做到这一点?

打字稿游乐场

export type PrimaryKey = { [key: keyof Model.$primaryKey]: DBCell }

export abstract class Model extends DB {
  public $primaryKey: string[] = ['a', 'b']

  public get primaryKey(): PrimaryKey { 
    return { a: 123, b: 456 }
  }
}

标签: javascripttypescript

解决方案


我设法通过PrimaryKey以下更改进行了定义:

public $primaryKey = ['a', 'b'] as const;

as const导致的类型$primaryKey被推断为['a', 'b'](文字字符串类型的元组)而不是普通的string[].

然后,您可以将其转换为'a' | 'b'使用索引类型:

Model["$primaryKey"][number]

第一组括号提取元组类型,第二组将其转换为其值的并集。

从那里使用Record实用程序类型创建一个对象是微不足道的:

export type PrimaryKey = Record<Model["$primaryKey"][number], DBCell>

打字稿游乐场


推荐阅读