JSDo c - определение подробного типа возвращаемого значения для массива предопределенных типов - PullRequest
1 голос
/ 24 февраля 2020

TLDR; Как я могу перевести:

/** @return {((function(...[*]=))|{})[]} */

на свой @typedef.

Я пытаюсь правильно определить значение, возвращаемое моей функцией в @typedef с использованием JSDo c, и я не могу правильно определить его, не заменив мой тип на @return {((function(...[*]=))|{})[]} *.

Что В настоящее время у меня:

/**
 * @typedef {Array} MyType
 * @property {function(): void} submit - Submit
 * @property {Object} state - FetchResult
 */

/** @return {MyType} */
function fooBar() {
    return [() => {}, {}];
}

приводит к предупреждению:

Returned expression type ((function(...[*]=)) | {})[] is not assignable to type MyType

Замена JSDo c для fooBar() на:

/** @return {((function(...[*]=))|{})[]} */

приводит к правильное поведение.

Спасибо за помощь,

1 Ответ

1 голос
/ 25 февраля 2020

То, что вы сделали, это свойства документа для самого типа Array, а не значения, которые находятся внутри массива:

/**
 * @typedef {Array} MyType
 * @property {function(): void} submit - Submit <--- MyType.submit?
 * @property {Object} state - FetchResult       <--- MyType.state?
 */

То, что вы можете захотеть сделать, это именованное метка для индекса массива:

/**
 * @typedef {Array} MyType
 * @property {Function} 0 - Submit function
 * @property {Object} 1 - state
 */

Однако, Судя по этой открытой в настоящее время проблеме для jsdocs Я бы сказал, что это не решает проблему полностью. Выражение возврата в fooBar все еще, вероятно, будет выделено, говоря, что "*[] is not assignable to type MyType", даже если у вас есть @returns {MyType}, документирующая функцию.

...