Получить имя T в машинописном тексте

#typescript #typescript-generics

Вопрос:

Мне нужна помощь с машинописным текстом.

Как получить имя интерфейса T из этого кода:

 interface User 
  {
      id    : number,
      name  : string
  }

  interface UserData 
  {
      id    : number,
      user_id    : number,
      key  : string,
      value  : string
  }



  function get<T>(){
    const type = typeof(T);
}

get<User>();
get<UserData>();

 

первая строка в методе get() возвращает ошибку:

 const type = typeof(T);
 

Как получить тип T?

Спасибо.

Комментарии:

1. Что вы собираетесь делать с этой информацией? Типы не обязательно существуют во время выполнения.

2. Короткий ответ на это — «ты не можешь». Как get<User>() и get<UserData>() в TypeScript, скомпилируйте в JavaScript get() . Похоже на проблему XY ; каков основной вариант использования?

3. Также стоит отметить interface , что они абстрактны, IOW: вы не можете создавать их экземпляры, поэтому, если ваша функция после вызова get возвращает какой-либо объект, который является пользователем или данными пользователя, это классы, которые вы, вероятно, ищете, а не интерфейсы. ИОУ: вы ищете заводской образец?..

Ответ №1:

Ну, во-первых, вам нужно будет ввести параметр типа T в качестве входных данных. Иначе вам не на что будет проверять тип. Насколько я знаю, функции typeof() не существует. Синтаксис таков: «введите «То, что вы хотите проверить» » — > (это будет возвращено в строке). Вы можете использовать приведенный ниже код. Но это вас не удовлетворит, потому что это всегда будет объектом из-за компиляции машинописного текста в javascript.

  function get<T>(arg: T){
console.log(typeof arg);
} // will return object
 

Комментарии:

1. в c# есть имя метода : Type type = arg. GetType();