ฟังก์ชันเสริม TypeScript ในอินเทอร์เฟซ


99

เป็นไปได้ไหมที่จะสร้างอินเทอร์เฟซใน TypeScript ด้วยฟังก์ชันเสริม?

interface IElement {
  name: string;
  options: any;
  type: string;
  value?: string;
  validation(any): boolean; // --> should be optional.

}

2
ฉันพบคำตอบฉันคิดว่ามีความเป็นไปได้ที่จะใช้ฟังก์ชันเสริมเช่นนี้: validation ?: (any) => boolean;
Anton Selin

คำตอบ:


194

ปัจจุบันมีไวยากรณ์สามแบบที่ 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;

3
วิธีการที่คุณได้เขียนมันanyไม่ได้เป็นประเภท anyแต่เป็นชื่อของพารามิเตอร์ที่เป็นโดยปริยายประเภท ต้องตั้งชื่อพารามิเตอร์แม้กระทั่งบนอินเทอร์เฟซ โค้ดนี้จะไม่สามารถคอมไพล์ได้หากเปิดใช้งาน --noImplicitAny มันควรจะเป็นอะไรเช่นนี้validation?:(whatever:any) => boolean;ที่whateverบางชื่อพารามิเตอร์ที่เหมาะสม
NYCdotNet

@NYCdotNet: ใช่ฉันไม่ควรเอาต้นฉบับที่อ่านมา แก้ไขแล้ว :)
Gone Coding

@ หายไปเข้ารหัสสวัสดี! จะทราบได้อย่างไรว่ามีการกำหนดฟังก์ชันไว้หรือไม่?
Ilan Olkies

1
@IlanOlkies: วิธีเดียวกับที่คุณทดสอบอะไรก็ได้ใน JavaScript if (object.validation):) มันต้องขัดกับบริบทของวัตถุดังนั้นif (this.validation)อาจจะเหมาะสมขึ้นอยู่กับสถานการณ์ของคุณ
Gone Coding
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.