วิธีการระบุพารามิเตอร์เป็นทางเลือกโดยใช้ JSDoc แบบอินไลน์


119

ตาม JSDoc wiki สำหรับ@paramคุณสามารถระบุว่า @param เป็นทางเลือกโดยใช้

/**
    @param {String} [name]
*/
function getPerson(name) {
}

และคุณสามารถระบุพารามิเตอร์แบบอินไลน์ได้โดยใช้

function getPerson(/**String*/ name) {
}

และฉันสามารถรวมเข้าด้วยกันดังต่อไปนี้ซึ่งใช้ได้ดี

/**
    @param [name]
*/
function getPerson(/**String*/name) {
}

แต่อยากทราบว่ามีวิธีทำแบบอินไลน์ทั้งหมดไหมถ้าเป็นไปได้

คำตอบ:


123

จากเอกสารอย่างเป็นทางการ :

พารามิเตอร์ทางเลือก

พารามิเตอร์ทางเลือกชื่อ foo

@param {number} [foo]
// or:
@param {number=} foo

พารามิเตอร์ทางเลือก foo ที่มีค่าดีฟอลต์ 1

@param {number} [foo=1]

7
ฉันถามวิธีการทำแบบอินไลน์ ตัวอย่างที่คุณให้มาดูเหมือนจะเหมือนกับที่ฉันแสดงในคำถามของฉัน
studgeek

67

หลังจากขุดขึ้นมาฉันพบว่าสิ่งเหล่านี้ก็โอเคเช่นกัน

/**
 * @param {MyClass|undefined}
 * @param {MyClass=}
 * @param {String} [accessLevel="author"] The user accessLevel is optional.
 * @param {String} [accessLevel] The user accessLevel is optional.
 */

ดึงดูดสายตาเพียงเล็กน้อยกว่า function test(/**String=*/arg) {}


9
สิ่งเหล่านี้ถูกต้อง (และบันทึกไว้ในวิธีใช้ JSDoc) แต่ไม่ได้อยู่ในบรรทัด - ซึ่งเป็นสิ่งที่ฉันกำลังมองหา
studgeek

คำถามเกี่ยวกับสัญกรณ์ JSDoc แบบอินไลน์ นี่เป็นข้อมูลที่น่าสนใจ แต่ไม่ตอบคำถาม
Ken Bellows

51

ผมพบว่าวิธีที่จะทำเช่นนี้โดยใช้ Google ปิดคอมไพเลอร์การแสดงออกประเภท คุณใส่เครื่องหมายเท่ากับหลังประเภทดังนี้: function test(/**String=*/arg) {}


10
WebStorm / IntellIDEA สนับสนุนสัญกรณ์นี้
Peter Aron Zentai

3
ใช่ฉันคิดว่ามันได้รับการยอมรับเพียงพอที่จะทำเครื่องหมายเป็นคำตอบ
studgeek

4
@PeterAronZentai ฉันจะเพิ่ม WebStorm / IntelliIDEA รองรับเนื่องจากฉันส่งคำขอคุณสมบัติเข้ามา :) ตอนนี้พวกเขารองรับนิพจน์ประเภท Google Closure Compiler ส่วนใหญ่ซึ่งดีมาก
studgeek

1
ไม่ทำงานสำหรับฉันสำหรับพารามิเตอร์ตัวเลือกที่สอง
DaveWalley

3

ในกรณีที่คุณใช้ความคิดเห็นประเภทอินไลน์กับอาร์กิวเมนต์ของฟังก์ชันและสงสัยว่าจะทำเครื่องหมายอาร์กิวเมนต์ของฟังก์ชันเป็นทางเลือกในสัญกรณ์นั้นได้อย่างไรฉันพบว่าเพียงแค่กำหนดค่าเริ่มต้นให้กับอาร์กิวเมนต์ที่เป็นทางเลือกก็ได้ หากคุณต้องการให้ค่าเริ่มต้นเป็นundefinedคุณต้องตั้งค่าให้ชัดเจนเช่นกันมิฉะนั้นอาร์กิวเมนต์จะไม่ถูกทำเครื่องหมายเป็นทางเลือก (แม้ว่าจะนำหน้าด้วยอาร์กิวเมนต์ที่เป็นทางเลือกอยู่แล้วก็ตาม):

function demo(
  /** @type {String} */ mandatory,
  /** @type {Number} */ optional1 = 0,
  /** @type {Number} optional2 = undefined,
)

หากคุณวางเมาส์เหนือdemoIDE ของคุณคุณจะเห็นทั้งสองอย่างoptional1และoptional2แสดงเป็นตัวเลือกในขณะนี้ ใน VSCode ที่ระบุตาม?หลังชื่ออาร์กิวเมนต์ (สัญกรณ์ TypeScript) ถ้าคุณเอา= undefinedจากoptional2คุณจะเห็นเพียงoptional1เป็นตัวเลือกซึ่งเป็นเรื่องไร้สาระแน่นอนดังนั้นค่าเริ่มต้นที่นี่จะต้องเป็นอย่างชัดเจนเหมือนที่ผมพูดพาดพิงถึงในย่อหน้าข้างต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.