javascript - 结果作为对象,其中键是数组中的每个值

标签 javascript typescript

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

TypeScript Playground

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 }
  }
}

最佳答案

我已经设法通过以下更改定义了 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>

TypeScript Playground

关于javascript - 结果作为对象,其中键是数组中的每个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57452406/

相关文章:

javascript - 根据内部数组对数组进行排序

angular - 需要 Ionic platform.ready() 方法

javascript - 如何使用 Python/Flask/Jinja 将外部(跨域)JSON 加载到 D3.js 中?

javascript - 使用 jQuery/Javascript 单击时创建同一 Div 的多个随机实例?

javascript - 如何为如下所示的 JavaScript 库编写 Typescript 定义文件?

javascript - 数组值传递到 SQL Server IN 查询

javascript - 如何以正确的方式动态设置对象的属性?

javascript - HTML5 FileReader 如何返回结果?

javascript - 如何使用 Sweet Alert 进行确认?

javascript - 如何使用 Angular 6 中的库发布指定已发布的 package.json?