TypeScript 属性装饰器

/**
 * 属性装饰器只能接收到两个参数
 * @param target Test 对应的 prototype
 * @param key  属性名字
 */
function nameDecorator(target: any, key: string):any {
  const descriptor: PropertyDescriptor = {
    writable: false
  }

  return descriptor;
}

class Test{ 
  @nameDecorator
  name = '1111'
}

const test = new Test();

// 本身是可以对属性进行修改的
// test.name = '2222';
// console.log(test.name); // 2222

// 在装饰器里面加以修饰就可以改变这个局面
test.name = '3333'
console.log(test.name); // 报错