Ответ
Рефлексия в TypeScript — это возможность анализировать и изменять структуру объектов во время выполнения. Однако, в отличие от языков с полной рефлексией (например, Java), TypeScript ограничен из-за компиляции в JavaScript.
Основные возможности:
- Проверка типов через
typeof,instanceof - Получение информации о типах через декораторы или метаданные (с
emitDecoratorMetadata: true)
Пример с декораторами:
function logType(target: any, key: string) {
const type = Reflect.getMetadata("design:type", target, key);
console.log(`${key} type: ${type.name}`);
}
class Example {
@logType
public name: string = "test";
}
// Выведет: "name type: String"
Важно: рефлексия в TypeScript работает только с включенными флагами компилятора и имеет ограничения, так как типы стираются при компиляции.
Ответ 18+ 🔞
А, рефлексия в TypeScript, говоришь? Ну это такая штука, чтобы во время работы программы, как в зеркало, на свои же объекты посмотреть — что внутри, из чего состоят. Но тут, блядь, есть нюанс, ёпта!
TypeScript — он же в итоге в JavaScript превращается, а там про типы все похуй, они просто стираются, как ластиком. Получается, мы хотим рефлексии, а нам — хуй с горы. Не как в этих ваших Java, где можно всё насквозь просветить.
Но кое-что выцарапать можно, не без этого:
- Простые проверки:
typeof,instanceof— это наше всё, родное, ясное. «Ты кто такой? А, строка? Иди нахуй, работай». - Хитрый манёвр с декораторами: Вот тут уже интереснее, можно кое-какие метаданные о типах прилепить, если компилятору правильную кнопку нажать (
emitDecoratorMetadata: true). Без этого флага — нихуя не получится, имей в виду!
Смотри, как примерно выглядит этот цирк:
function logType(target: any, key: string) {
// А теперь, сука, достаём из тайников то, что компилятор любезно припрятал
const type = Reflect.getMetadata("design:type", target, key);
console.log(`${key} type: ${type.name}`);
}
class Example {
@logType // Вешаем наш шпионский декоратор
public name: string = "test";
}
// Выведет в консоль: "name type: String"
Видал? Тип string превратился в String. Это уже что-то! Но это работает, повторюсь, только если ты компилятор заранее подготовил, как того коня под японского императора. И то — не всё, что захочешь, увидишь. Ограничения, блядь, на каждом шагу.
Короче, инструмент есть, но он не волшебный. Хочешь полную магию — иди в C# или Java. А здесь — больше костылей и понимания, что под капотом творится. Чистый JavaScript, ёпта, со всеми вытекающими.