javascript - Vue 3 - การตั้งค่าประเภทสำหรับคอมโพเนนต์และ props ของมันเมื่อถูกใช้เป็นพารามิเตอร์ของฟังก์ชัน
ใน Vue 3 ฉันกำลังสร้างฟังก์ชันที่จะรับอินสแตนซ์ของคอมโพเนนต์และ props ที่จะส่งผ่านไปด้วย ฉันยังใช้ TypeScript อยู่และสงสัยว่าฉันสามารถกำหนดประเภทให้กับพารามิเตอร์เหล่านั้นได้หรือไม่ ตัวอย่างเช่น ฟังก์ชันจะเป็นบางอย่างเช่น:
const example = (component, props) => {
//
};
ดังนั้นคำถามของฉันคือ:
- ฉันสามารถระบุประเภทสำหรับอินสแตนซ์ของคอมโพเนนต์ได้อย่างไร เหล่านี้จะไม่ได้เป็นคอมโพเนนต์ชนิดเดียวกันเสมอไป แต่ควรจะเป็นคอมโพเนนต์ที่ใช้เพื่อวัตถุประสงค์ที่คล้ายกันอย่างน้อย
- จะมีวิธีใดที่ฉันสามารถระบุประเภทสำหรับ props ได้และจำกัดมันให้กับ props ที่จะใช้กับพารามิเตอร์ตัวแรก (component) ได้หรือไม่?
คำตอบ #1
คุณสามารถใช้ฟีเจอร์หลายอย่างที่มีอยู่ใน TypeScript และประเภท Component จาก Vue เพื่อให้ได้การพิมพ์ที่ถูกต้องของคุณ สร้างประเภททั่วไปที่ขยาย Component จากนั้นสรุปตัวเลือก/พร็อพของคอมโพเนนต์โดยใช้ infer ใช้ Partial เพื่อทำให้เป็นค่าเลือกได้ :
import type { Component } from "vue";
function example<T extends Component>
(Comp: T, props: T extends Component<infer P> ? Partial<P> : never) {
//....
}
example(Alert, { variant: "success"})
หมายเหตุ: สิ่งนี้ยังสื่อถึงคุณสมบัติและยูทิลิตี้ของอินสแตนซ์คอมโพเนนต์ด้วย
