I would like to create a union type from a property of the elements of an array. If the array were inline, that would be pretty straightforward using a constant assertion.
const arr = [{ "name": "One" }, { "name": "Two" }] as const;
type name = typeof arr[number]["name"];
// name = "One" | "Two"
Note that without as const
the type name
becomes equal to string
, which is not the intent.
The problem I'm facing is that the array is defined in a separate JSON file.
I set "resolveJsonModule": true
in the TypeScript options so I can import the JSON file in my module.
But then the compiler widens the type of all properties in the array as there is no as const
on the definition.
import * as arr from "./array.json";
type name = typeof arr[number]["name"];
// name = string (!)
Is there a way I can import a JSON file without type widening?
arr[<idx>].name
– Topmost