customRef
type CustomRefFactory<T> = (track: () => void,trigger: () => void) => {
get: () => T
set: (value: T) => void
}
function customRef<T>(factory: CustomRefFactory<T>): any {
const { get, set } = factory(
() => console.log('get value'),
() => console.log('set value')
)
const r = {
get value() {
return get()
},
set value(v) {
set(v)
}
}
return r
}
const ss = function (value) {
return customRef((track,trigger)=>{
return {
get() {
track()
return value
},
set(val) {
value = val
trigger()
}
}
})
}
let number = ss(11)
console.log(number.value)
number.value = 22
type FilterFn<T> = (item: T,index?:number,array?:T[]) => boolean
class Arrays <T>{
value: T[]
constructor(...args: T[]){
this.value = args
}
filter(fn:FilterFn<T>):T[]{
const array:T[] = []
const len = this.value.length
let index = -1
while(++index<len){
const element = this.value[index]
const ret = fn(element,index,this.value)
if (ret){
array.push(element)
}
}
return array
}
}
const sd = new Arrays<number>(1,2,3)
console.log(sd.filter(item=>item>2))