Làm thế nào để chỉ ra thông số là tùy chọn bằng cách sử dụng JSDoc nội tuyến?


119

Theo wiki JSDoc cho @param, bạn có thể chỉ ra @param là tùy chọn sử dụng

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

và bạn có thể chỉ ra một param inline bằng cách sử dụng

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

Và tôi có thể kết hợp chúng như sau, hoạt động tốt.

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

Nhưng tôi muốn biết nếu có thể có cách nào để thực hiện tất cả nội tuyến.

Câu trả lời:


123

Từ tài liệu chính thức :

Tham số tùy chọn

Một tham số tùy chọn có tên foo.

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

Một tham số tùy chọn foo với giá trị mặc định 1.

@param {number} [foo=1]

7
Tôi đã hỏi làm thế nào để làm điều đó nội dòng. Ví dụ bạn đang cung cấp có vẻ giống với những gì tôi đã trình bày trong câu hỏi của mình.
studgeek

67

Sau khi tìm hiểu, tôi thấy chúng cũng ổn

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

Chỉ hấp dẫn trực quan hơn một chút so với function test(/**String=*/arg) {}


9
Chúng hợp lệ (và được ghi lại trong trợ giúp JSDoc), nhưng chúng không nội tuyến - đó là những gì tôi đang tìm kiếm.
studgeek

Câu hỏi là về ký hiệu JSDoc nội tuyến. Đây là thông tin thú vị, nhưng không trả lời câu hỏi
Ken Bellows

51

Tôi đã tìm thấy một cách để thực hiện việc này bằng cách sử dụng các biểu thức loại Trình biên dịch đóng cửa của Google . Bạn đặt một dấu bằng sau loại như vậy: function test(/**String=*/arg) {}


10
WebStorm / IntellIDEA hỗ trợ ký hiệu này
Peter Aron Zentai

3
Vâng, vì vậy tôi nghĩ nó đã được chấp nhận đủ để đánh dấu nó là câu trả lời.
studgeek

4
@PeterAronZentai, tôi sẽ thêm WebStorm / IntelliIDEA hỗ trợ nó do tôi đưa ra một yêu cầu tính năng cho nó :). Giờ đây, họ hỗ trợ phần lớn các biểu thức loại Trình biên dịch đóng cửa của Google, điều này thật tuyệt vời.
studgeek

1
Không hoạt động đối với tôi cho một tham số thứ hai tùy chọn.
DaveWalley

1
xin vui lòng sửa chữa các liên kết; nó dẫn đến một trang 404
chharvey

3

Trong trường hợp bạn đang sử dụng nhận xét kiểu nội tuyến trên các đối số của hàm và đang tự hỏi làm thế nào để đánh dấu một đối số hàm là tùy chọn trong ký hiệu đó, tôi thấy rằng chỉ cần gán giá trị mặc định cho các đối số tùy chọn đã hoạt động. Nếu bạn muốn mặc định là mặc định, undefinedbạn cũng phải đặt nó một cách rõ ràng, nếu không đối số sẽ không được đánh dấu là tùy chọn (ngay cả khi nó đứng trước các đối số đã tùy chọn):

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

Nếu bạn di chuột qua demoIDE của mình, bạn sẽ thấy cả hai optional1optional2hiển thị dưới dạng tùy chọn ngay bây giờ. Trong VSCode được chỉ ra ?sau tên đối số (ký hiệu TypeScript). Nếu bạn xóa = undefinedkhỏi optional2bạn sẽ thấy chỉ optional1là tùy chọn, tất nhiên là vô nghĩa vì vậy giá trị mặc định ở đây phải rõ ràng như tôi đã ám chỉ trong đoạn trên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.