En este ejemplo en AdonisJS, la definición de la clase Post incluye secciones @column. ¿Alguien puede explicar qué hace esto? Supongo que está creando múltiples instancias de la clase 'columna' dentro de la clase Post como variables miembro, cada instancia con un nombre y tipo de datos diferente. Pero, ¿cómo funciona esto y para qué sirve el símbolo @?
import { column, BaseModel } from '@ioc:Adonis/Lucid/Orm' export default class Post extends BaseModel { @column({ isPrimary: true }) public id: number @column() public title: string @column() public description: string }¿Sería equivalente lo siguiente (sin los tipos de datos definidos)?
export default class Post extends BaseModel { constructor() { this.id = new column({ isPrimary: true }); this.title = new column(); this description = new column(); } }ACTUALIZAR:
Después de darme cuenta de que AdonisJS está escrito en TypeScript, encontré this , que responde a la pregunta.
Estos se denominan "decoradores", una función de javascript propuesta.
https://github.com/tc39/propuesta-decoradores
La propuesta ya ha pasado por varias iteraciones. TypeScript y babel tienen sus propias implementaciones de decoradores.
Los decoradores pueden modificar clases completas o campos de clase, por ejemplo, llamando a Object.defineProperty(classPrototype, key, {...}).
Lo que hace exactamente el decorador depende de su función de implementación.