1.2.6 • Published 5 years ago

js-data-model v1.2.6

Weekly downloads
1
License
MIT
Repository
github
Last release
5 years ago

这是啥

这是一个让表单转换稍微简单那么一点点的库~

有啥用

通过配置 model 的方式转换出一个可预期的 js 对象

啥时要

当你觉得数据转换写一堆 if else || switch case 不好看, 不好写的时候

咋子用

  • script标签引入
const {DataModel, parserTypes} = JsDataModel
const model = new DataModel(/** modelOptions */)

model.parse({}) // modelOptions -> an Object formated with model
  • esModule导入
import {DataModel, parserTypes} from 'js-data-model'

const model = new DataModel(
  aKey: {
    type: parserTypes.Number,
    default: 1
  }
) 

model.parse({}) // modelOptions -> an Object formated with model

更多例子可参考test/*

构造参数

model

interface Model {
  [key: any]: Options
}

interface Options {
  type?: any
  subModel?: OptionsMap
  default?: any
  parser?: CustomParser
  fromKey?: string
}
参数说明
typeparser 的类型, 可使用 parserTypes.*
subModelmodel, 用来表示objectarray下一层级的类型
default内置 parser 返回 nullundefined 时, 使用这个值返回, 如果返回一个对象需要是一个工厂函数
parser自定义 parser
fromKey初始值来源的 key, 默认是 model 的 key

实例方法

parser

  type Parser = (val: any, model: Model, helperData?: any) => any

静态方法

addParserTypes

addParserTypes(types: Record<string, any>): void

addParser

addParser(type: any, parser: Parser): void

use

use(plugin: DataModelPlugin, options?: any): void

内置 parser 转换规则

val: 初始值

Number

初始值转换结果
nullundefined
undefinedundefined
stringval
numberNumber(val)
objectNaN
arrayNaN

String

初始值转换结果
nullundefined
undefinedundefined
stringString(val)
numberval
objectJSON.stringify(val)
arrayJSON.stringify(val)

Boolean

初始值转换结果
nullfalse
undefinedfalse
''false
stringtrue
0false
numbertrue
objecttrue
arraytrue

本质是!val

Object

初始值转换结果
null{}
undefined{}
string'{}
number{}
object浅克隆(val)
带有 subModel 的 object{} as typeof subModel
array{}

Array

初始值转换结果
null[]
undefined[]
string[]
number[]
object[]
array浅克隆(val)
带有 subModel 的 array(typeof subModel)[]

TODO

  • parserTypes.Array subModel 为 parserTypes 的值之一
  • type 字段支持传入 DataModel 的实例
1.2.6

5 years ago

1.2.5

5 years ago

1.2.4

5 years ago

1.2.3

5 years ago

1.2.2

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

5 years ago

1.1.0

5 years ago

1.0.0

5 years ago