ค้นหาเว็บไซต์

javascript - ประเภทของค่าคุณสมบัติในอ็อบเจ็กต์ทั่วไป


ฉันกำลังพยายามพิมพ์พารามิเตอร์ value ของฟังก์ชัน setObject :

type setValueType<T> = (newValue: T) => void

const useObject = () => {
    const setObject = <T>(property: string, value: any, object: T, setValue: setValueType<T>) => {
        setValue({
            ...object,
            [property]: value
        })
    }

    return {
        setObject
    }
}

export default useObject

แต่ฉันไม่รู้ว่าจะใส่อะไรสำหรับประเภท value ฉันต้องการให้ value นั้นเป็นประเภทของ T[property] แต่ฉันไม่รู้ว่าจะทำอย่างไร...

คำตอบ #1

คุณแค่ต้องเพิ่มประเภททั่วไปมากขึ้น:

type setValueType<T> = (newValue: T) => void

const useObject = () => {
  const setObject = <
    Obj,
    Prop extends keyof Obj,
    Value extends Obj[Prop]
  >(property: Prop, value: Value, object: Obj, setValue: setValueType<Obj & Record<Prop, Value>>) => {
    setValue({
      ...object,
      [property]: value
    })
  }

  return {
    setObject
  }
}

export default useObject

Prop แบบทั่วไปแทนคีย์/พร็อพของอ็อบเจ็กต์

Obj แบบทั่วไปหมายถึงวัตถุ

Value แบบทั่วไปแทนค่าที่ใหม่

แจ้งให้ฉันทราบถ้ามันใช้ได้สำหรับคุณ