#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, скомпилируйте в JavaScriptget()
. Похоже на проблему 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();