我试图弄清楚如何定义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>
打字稿游乐场