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 แบบทั่วไปแทนค่าที่ใหม่
แจ้งให้ฉันทราบถ้ามันใช้ได้สำหรับคุณ
