MST正确使用types

基本数据类型:

types.string(字符串),types.number(数值),types.boolean(布尔),types.integer(整型),types.Date(日期,时间戳或date对象),types.null(null类型),types.undefined(..)

复杂数据类型:

types.model(对象类型),types.array(数组类型),

types.map(map类型,key是字符串,值为指定类型),  例: types.map(types.number) => {'0':1}

types.optional(可选类型,是一个方法,参数1:定义类型,参数2:默认值): 例:types.optional(types.number,1),types.optional(types.array(types.number), []);

types.custom(自定义类型):例如:

const MyDecimal = types.custom<string, Decimal>({

/** Friendly name */

name:string;

/** given a serialized value and environment, how to turn it into the target type */

fromSnapshot(snapshot:S,env?:any):T;

/** return the serialization of the current value */

toSnapshot(value:T):S;

/** if true, this is a converted value, if false, it's a snapshot */

isTargetType(value:T|S):boolean;

/** a non empty string is assumed to be a validation error */

getValidationMessage(snapshot:S):string;

})

types.union(联合类型), 例:types.union(types.number, types.string)

types.literal(字面值类型) 例: types.literal('abc'), types.literal(null), types.literal(undefined)

types.enumeration(枚举类型)例:types.enumeration('gender',['male']); 参数1:枚举类型名称, 参数2:枚举数组

types.maybe(可以undefined) 例: types.optional(types.union(types.string,types.literal(null)),null) === types.maybe(types.string)

types.maybeNull(可以null)

types.frozen(冻结的,定义不可编辑数据,属性变化不会引起相应状态更新)  例: types.model('store',{data:types.frozen() })

types.late(滞后类型,内部是一个方法)  例: types.model('A',{ a:types.maybe(types.late(() => A))})

types.refinement(提纯类型,定义字段,添加额外校验规则) 例: const EmailType = types.refinement('Email',types.string,(snapshot) =>/^[a-zA-Z_1-9]+@\.[a-z]+/.test(snapshot))

引用类型,标识符

types.identifier (唯一的)

types.identifierNumber(唯一的number类型)

types.reference(引用类型进行跟踪,设定值关联相同id对应obj, 可以设置diergobj参数自定义查找)

types.safeReference(安全的引用,如果对应obj删掉,那么重置undefined)

reference实现safeReference:

constselfSafeReference = types.maybeNull(  types.reference(Product, {get(id: number, parent: Instance){returnparent.products.find(p=>p.id === id) ||undefined},set(value: Instance){returnvalue.id      }  }))

ts可能遇到的问题解决方案: 实例的快照:cast(store) ,快照的实例: castToSnapShot(store)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容