Я не думаю, что вы можете достичь этого с помощью массива, поскольку они изменчивы во время выполнения:
const OPTIONS = ['one', 'two', 'three'];
OPTIONS[0] = 'BOOM';
Однако вы можете изменить массив на кортеж (кортежи являются неизменяемыми):
const OPTIONS = ['one', 'two', 'three'];
const OPTIONS_TUPLE = ['one', 'two', 'three'] as const;
Сравнить предполагаемые типы:
// const OPTIONS: string[]
// const OPTIONS_TUPLE: readonly ["one", "two", "three"]
Теперь вы можете получить нужный тип:
const OPTIONS_TUPLE = ['one', 'two', 'three'] as const;
type OptionsValue = typeof OPTIONS_TUPLE[number];
const x: OptionsValue = 'four';
//TS2322: Type '"four"' is not assignable to type '"one" | "two" | "three"'.