我试图弄清楚如何定义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 - 作为对象的结果,其中key是数组中的每个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57452406/

10-09 17:05