Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

218
Views
¿Cómo usar Reflection en TypeScript de manera similar a Java?

Estoy usando la reflexión en Java para obtener información de la anotación TestNG como en el fragmento de código a continuación:

 Reflections reflections = new Reflections("", new MethodAnnotationsScanner()) Set<Method> annotated = reflections.getMethodsAnnotatedWith(Test.class)

Actualmente, tengo un marco de broma con un complemento decorado con broma para ayudar en el uso de anotaciones.

¿Cómo puedo replicar el mismo método de reflexión en Java pero en mecanografiado para recopilar esta información de las anotaciones?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Eche un vistazo a Decorators + Reflect Metadata API de Typescript, que también se puede habilitar para el compilador TS. No funciona exactamente como Java, pero aún puede recopilar la información requerida sobre las entidades anotadas. Pequeño ejemplo de cómo recopilar clases anotadas:

 const myTypes: any[] = [] @annotation class MyClass { type = "report"; title: string; constructor(t: string) { this.title = t; } } function annotation(constructor: Function) { myTypes.push(constructor) } console.log('All annotated classes', myTypes);
about 4 years ago · Juan Pablo Isaza Report

0

Prueba tst-reflect . Es un sistema de reflexión bastante avanzado para TypeScript ( usando un complemento de transformador de TypeScript personalizado ).

Esto debería ser equivalente a su código Java:

 import { reflect, Type } from "tst-reflect"; // Some decorator... function test(_, __) { } @reflect() class A { @test foo() { return 0; } bar() { return "lorem ipsum"; } } @reflect() class B { @test bar() { return "lorem ipsum"; } } @reflect() class C { baz() { return "lorem ipsum"; } } const decoratedMethods = Type.getTypes() .flatMap(type => type.getMethods().map(method => ({ method, type }))) .filter(entry => entry.method.getDecorators().some(decorator => decorator.name == "test")); for (let entry of decoratedMethods) { console.log(entry.method.name, "in", entry.type.name); }

Producción

 foo in A bar in B

Consulta Sinopsis . Puede crear instancias de esos tipos (incluso si son de diferentes archivos) y llamar a esos métodos. Además, esos decoradores pueden tener argumentos, por lo que podrá filtrar métodos con los mismos decoradores pero diferentes argumentos.

tst-reflect aún está en desarrollo, por lo que las búsquedas globales de tipos requieren esos decoradores @reflect o decoradores personalizados con la etiqueta @reflect JSDoc; la razón es la optimización del tamaño de los metadatos generados. Pero hay un problema para ampliar la configuración "incluye" patrones glob que incluirán todos los tipos de todos los módulos que coincidan con esos globs.

PD: Consulte la wiki de configuración y use esta configuración:

tsconfig.json

 { "compilerOptions": { // your options... // ADD THIS! "plugins": [ { "transform": "tst-reflect-transformer" } ] }, // ADD THIS! "reflection": { "metadata": { "type": "typelib" // this mode will generate and auto-import library with generated reflection metadata } } }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!