เป็นไปได้ไหมที่จะสร้างอินเทอร์เฟซใน TypeScript ด้วยฟังก์ชันเสริม?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
เป็นไปได้ไหมที่จะสร้างอินเทอร์เฟซใน TypeScript ด้วยฟังก์ชันเสริม?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
คำตอบ:
ปัจจุบันมีไวยากรณ์สามแบบที่ TypeScript อนุญาตให้ประกาศฟังก์ชันในอินเทอร์เฟซ:
ใช้ตัวอย่างของvalidationฟังก์ชันที่รับพารามิเตอร์ 1 ตัว ( anyประเภท) และbooleanค่าส่งคืน:
validation: {(flag: any): boolean};
หรือในไวยากรณ์ที่ใหม่กว่า:
validation(flag: any) : boolean;
หรืออีกทางเลือกหนึ่งคือ:
validation: (flag: any) => boolean;
วิธีการแก้:
ดังนั้นเพื่อให้เป็นทางเลือกด้วยไวยากรณ์เก่าจึงทำได้ง่าย:
validation?: {(flag: any): boolean};
ด้วยไวยากรณ์ที่สอง (การเพิ่มล่าสุด - ขอบคุณ@toothbrush)
validation?(flag: any) : boolean;
หรือในไวยากรณ์ที่สาม (ตามที่คุณพบ):
validation?: (flag: any) => boolean;
anyไม่ได้เป็นประเภท anyแต่เป็นชื่อของพารามิเตอร์ที่เป็นโดยปริยายประเภท ต้องตั้งชื่อพารามิเตอร์แม้กระทั่งบนอินเทอร์เฟซ โค้ดนี้จะไม่สามารถคอมไพล์ได้หากเปิดใช้งาน --noImplicitAny มันควรจะเป็นอะไรเช่นนี้validation?:(whatever:any) => boolean;ที่whateverบางชื่อพารามิเตอร์ที่เหมาะสม
if (object.validation):) มันต้องขัดกับบริบทของวัตถุดังนั้นif (this.validation)อาจจะเหมาะสมขึ้นอยู่กับสถานการณ์ของคุณ