Можно ли в typescript создать переменную определённого типа динамически, имея параметр строчного типа?

Да, в TypeScript есть возможность динамического создания переменной определенного типа, основываясь на параметре строчного типа. Для этого TypeScript предоставляет возможность использования условных типов в комбинации с встроенным ключевым словом typeof и оператором условной проверки типа extends.

Предположим, у нас есть функция createVariable, которая принимает параметр типа string, представляющий желаемый тип переменной. Мы хотим, чтобы функция создавала новую переменную с этим типом. Можем использовать условные типы, чтобы динамически определить тип переменной.

Вот пример такой функции:

function createVariable<T extends string>(type: T): (T extends 'string' ? string : T extends 'number' ? number : any) {
  let variable: any; // Объявляем переменную с типом any
  
  switch (type) {
    case 'string':
      variable = 'example';
      break;
    case 'number':
      variable = 5;
      break;
    default:
      variable = null;
  }

  return variable;
}

const stringVariable = createVariable('string'); // Тип string
const numberVariable = createVariable('number'); // Тип number
const anyVariable = createVariable('other'); // Тип any

В этом примере, тип параметра T ограничен типом string. Используя ключевое слово extends, мы проверяем значение параметра type на соответствие определенным строковым значениям. Если значение соответствует 'string', то возвращаем значение типа string. Если значение соответствует 'number', то возвращаем значение типа number. В противном случае, возвращаем значение типа any.

Хотелось бы отметить, что хотя это позволяет динамически создавать переменные с определенным типом, использование такого подхода может быть не очень безопасным. Использование any или динамического типа может привести к потенциальным проблемам со статической типизацией в TypeScript. Рекомендуется использовать строгую типизацию в TypeScript с использованием определенных заранее типов, чтобы предотвратить возможные ошибки во время выполнения.