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