const hasChanged =(value: any,oldValue: any):boolean=>
value !== oldValue &&(value === value || oldValue === oldValue)
类型判断
const objectToString =Object.prototype.toString
const toTypeString =(value: unknown):string=>objectToString.call(value)const hasOwnProperty =Object.prototype.hasOwnProperty
const hasOwn =(val: object,key: string | symbol
): key is keyof typeofval=>hasOwnProperty.call(val, key)//数组const isArray = Array.isArray
//Mapconst isMap =(val: unknown): val is Map<any, any>=>toTypeString(val)==='[object Map]'//集合const isSet =(val: unknown): val is Set<any>=>toTypeString(val)==='[object Set]'//Dateconst isDate =(val: unknown): val is Date=> val instanceofDate//函数const isFunction =(val: unknown): val is Function=>typeof val ==='function'//字符串const isString =(val: unknown): val is string=>typeof val ==='string'//数字const isNumber =(val: unknown): val is string=>typeof val ==='number'//symbolconst isSymbol =(val: unknown): val is symbol=>typeof val ==='symbol'//对象const isObject =(val: unknown): val is Record<any, any>=>
val !==null&&typeof val ==='object'//Promiseconst isPromise =<T= any>(val: unknown): val is Promise<T>=>{returnisObject(val)&&isFunction(val.then)&&isFunction(val.catch)}