How do I define an array of keys of an object in TypeScript?
Example:
const obj = {
red: 0,
blue: 1
};
// Doesn't work
const test: keyof obj[] = ['red', 'blue'];
CodePudding user response:
You have two problems.
First, you are referring to a value obj
as a type, which is not allowed. You can get the type of a value with the typeof
keyword.
Second, keyof Something[]
will get you keyof (Something[])
, the keys of the array type, and not (keyof Something)[]
, which is what you want here. You can use parentheses to fix that.
Putting that together looks like:
const obj = {
red: 0,
blue: 1
};
const test: (keyof typeof obj)[] = ['red', 'blue'];
Although most often you'd want to declare a type for obj
on it's own, so it's easier to use and reference elsewhere.
interface MyType {
red: number
blue: number
}
const obj: MyType = {
red: 0,
blue: 1
};
const test: (keyof MyType)[] = ['red', 'blue'];
CodePudding user response:
One solution is:
const test: Array<keyof typeof obj> = ['red', 'blue'];