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



我试图弄清楚如何定义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 }
}
}

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

打字稿游乐场

最新更新