实现基于mockjs的Typescript对象Mock,使用Decorator的方式

532 阅读1分钟

在这个示例中,我们将使用 TypeScript 装饰器和 Mock.js 来实现一个简单的对象模拟。首先,安装必要的依赖:

npm install mockjs
npm install reflect-metadata

然后,启用装饰器和反射元数据支持。在 tsconfig.json 中添加以下配置:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

接下来,创建一个装饰器,用于生成模拟数据:

// mock-decorator.ts
import 'reflect-metadata';
import Mock from 'mockjs';

export function MockProperty(mockTemplate: any) {
  return function (target: Object, propertyKey: string | symbol) {
    const targetType = Reflect.getMetadata('design:type', target, propertyKey);
    if (!targetType) {
      throw new Error('无法获取目标属性的类型。');
    }

    if (Array.isArray(targetType)) {
      target[propertyKey] = Mock.mock(mockTemplate);
    } else {
      target[propertyKey] = Mock.mock(mockTemplate);
    }
  };
}

接着,使用装饰器为实体类定义模拟数据:

// user.ts
import { MockProperty } from './mock-decorator';

export class User {
  @MockProperty('@name')
  name: string;

  @MockProperty('@integer(1, 100)')
  age: number;

  @MockProperty('@city')
  city: string;
}

最后,使用这些装饰器来生成模拟数据:

// main.ts
import { User } from './user';

const user = new User();
console.log(user);

运行代码后,你会看到控制台输出一个具有模拟数据的 User 实例。

通过这种方式,我们使用了 TypeScript 装饰器和 Mock.js 来实现基于对象的模拟数据生成。这样可以让你更方便地在开发过程中生成随机数据,而不需要手动创建模拟数据。