У меня есть массив строковых литералов, которые я хотел бы использовать в качестве имен свойств для класса.
const propNames = ["a", "b", "c"] as const;
Я хотел бы создать класс вроде
class Test {
[name in typeof propNames[number]]: any;
}
Но это дает ошибки (при проверке WebStorm):
TS1166: A computed property name in a class property declaration must refer to an expression whose type is a literal type or a 'unique symbol' type.
TS2464: A computed property name must be of type 'string', 'number', 'symbol', or 'any'.
TS2361: The right-hand side of an 'in' expression must be of type 'any', an object type or a type parameter.
TS2693: 'number' only refers to a type, but is being used as a value here.
Вместо этого я могу определить тип с такими свойствами, как
type Test = {
[name in typeof propNames[number]]: any;
}
Но я не знаю, как превратить это в класс с такими свойствами.
У меня есть дополнительный вопрос, который, как мне кажется, в настоящее время невозможен, но могу ли я создать эти имена свойств, объединив их с другим строковым литералом?
type Test = {
[name + 'Prop' in typeof propNames[number]]: any;
}