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