配置装饰器
属性的元数据(配置数据)
属性的元数据(配置数据)结构如下:
interface BasePropertyConfig {
/**
* 默认为 'auto'
* 'auto' | undefined | null: 不干扰该属性的存在与否,但 class 的元数据 partial 可以覆盖它
* 'partial' | true: 强制从 mock 结果中随机删除该属性
* 'include' | false: 强制从 mock 结果中包含该属性
* 'exclude': 强制从 mock 结果中删除该属性
*/
partial?: 'auto' | 'include' | 'exclude' | 'partial' | boolean | undefined | null
/**
* 默认为 true
* false: 强制该属性复用第一次生成的随机值
* true: 强制该属性每次都生成新的随机值
*/
alwaysRandom?: boolean
/**
* 默认为 undefined
* 该属性仅在这些组中生成,组将由 createMock 提供
*/
groups?: string[] | undefined | null
/**
* 默认为 false
* true: 该属性是一个数组
* false: 该属性是一个非数组值
*/
array?: boolean
/**
* 默认为 10
* 数组长度
* 在 array 为 true 时生效
* 若 min 或 max 存在,则本属性无效
*/
length?: number | undefined | null
/**
* 默认为 undefined
* 数组的最小长度,如果定义了 max ,则 min 默认为 0
* 在 array 为 true 时生效
*/
min?: number | undefined | null
/**
* 默认为 undefined
* 数组的最大长度,如果定义了 min ,则 max 默认为 50
* 在 array 为 true 时生效
*/
max?: number | undefined | null
}
@Config
设置属性元数据(配置数据)
function Config(config: BasePropertyConfig): PropertyDecorator
示例:
import {Config, Random} from 'class-mock'
class Student {
@Config({
alwaysRandom: true
})
@Random.words(5)
name?: string
@Config({
groups: ['showAge']
})
@Random.number()
age!: number
@Config({
array: true,
length: 3
})
@Random.words(5)
like?: string[]
}
createMock(Student, {
groups: ['showAge']
}) // { name: 'xxx', age: 18, like: ['xxx', 'xxx', 'xxx'] }
createMock(Student) // { name: 'xxx', like: ['xxx', 'xxx', 'xxx'] }
@IsPartial
设置属性的元数据(配置数据)的 partial
属性为 partial
。
@IsInclude
设置属性的元数据(配置数据)的 partial
属性为 include
。
@IsExclude
设置属性的元数据(配置数据)的 partial
属性为 exclude
。
@IsAlwaysRandom
设置属性的元数据(配置数据)的 alwaysRandom
属性为 true
。
@IsNotAlwaysRandom
设置属性的元数据(配置数据)的 alwaysRandom
属性为 false
。
@IsArray
设置属性的元数据(配置数据)的 array
属性为 true
。
interface ArrayConfig {
length?: number | undefined | null
min?: number | undefined | null
max?: number | undefined | null
}
function IsArray(length?: number): PropertyDecorator
function IsArray(arrayConfig?: ArrayConfig): PropertyDecorator
@IsNotArray
设置属性的元数据(配置数据)的 array
属性为 false
。
@Groups
设置属性的元数据(配置数据)的 groups
属性。
function Groups(groups: string[] | undefined | null): PropertyDecorator
链式调用
每个属性装饰器都支持链式调用,以下四个 Student
是等效的:
import {IsAlwaysRandom, IsPartial, IsNotArray, Groups, Config, Random} from 'class-mock'
class Student0 {
@IsAlwaysRandom()
@IsPartial()
@IsNotArray()
@Groups(['showName'])
@Random.words(5)
name?: string
}
class Student1 {
@Random.words(5)
.config({
alwaysRandom: true
})
.isPartial()
.isNotArray()
.groups(['showName'])
name?: string
}
class Student2 {
@Config({
alwaysRandom: true,
partial: 'partial',
array: false,
groups: ['showName']
})
@Random.words(5)
name?: string
}
class Student3 {
@Random.words(5).config({
alwaysRandom: true,
partial: 'partial',
array: false,
groups: ['showName']
})
name?: string
}