Say I have an array const arr = ['key1', 'key2', 'key3']
. How do I make a type like
type Test = { str: Items<arr> }
so that Test
types have a str
attribute that is either 'key1', 'key2', 'key3'
?
CodePudding user response:
By default TypeScript will infer arr
type as string[]
. If we want to infer it as ['key1', 'key2', 'key3']
we can either do as const
or as ['key1', 'key2', 'key3']
To get union type of object values you need to pass a union of object indices as a type index. type ValueOf<T> = T[keyof T]
. But in this case we have an array so just [number]
will do.
const arr = ['key1', 'key2', 'key3'] as const;
type Test = { str: typeof arr[number] }
const test: Test = {
str: 'key1'
}
CodePudding user response:
Define a type for just the values of str property separately. Then use it when defining your custom type Type
.
Something like the following:
type Str = 'key1' | 'key2' | 'key3';
type Type = { str: Str }