Как вы аннотируете функцию в JSDOC, которая принимает класс в качестве параметра и экземпляра в качестве типа возврата?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как вы аннотируете функцию в JSDOC, которая принимает класс в качестве параметра и экземпляра в качестве типа возврата?

Сообщение Anonymous »

У меня есть компонентная архитектура в проекте ванильного Javascript, и было бы неплохо легко запросить коллекцию компонентов для конкретного подкласса и получить возвратное значение того же типа (или нулевой, если не найден). Упрощенный пример: < /p>

Код: Выделить всё

class Component { /* ... */ }
class MyComponent extends Component { /* ... */ }

function findComponent(cls) {
// searches an array of components and returns the first component that is
// instanceof cls, or null if not found
}

let comp = findComponent(MyComponent);
// comp is of type MyComponent or null
Я хочу прокомментировать функцию с jsdoc, поэтому код VS понимает, что класс Cls I прохожу и необязательный возвращаемый экземпляр-один и тот же класс.

Код: Выделить всё

let foo = findComponent(FooComponent);  // VS Code knows foo is type {FooComponent|null}
let bar = findComponent(BarComponent);  // VS code knows bar is type {BarComponent|null}
< /code>
Наиболее очевидным решением для меня было бы что-то вроде этого: < /p>
/**
* @template {Component} C
* @param {typeof C} cls
* @returns {?C}
*/
function findComponent(cls) {}
< /code>
Но "c" в typeof c < /code> подчеркнута с ошибкой < /p>

'C' only refers to a type, but is being used as a value here.ts(2693)
ty typeof, кажется, не работает с шаблонами, по крайней мере, для Intellisense.
Я также попробовал @param {c.constructor} cls Я видел где -нибудь, но это жаловалось

Код: Выделить всё

Cannot access 'C.constructor' because 'C' is a type, but not a namespace. Did you mean to retrieve the type of the property 'constructor' in 'C' with 'C["constructor"]'?ts(2713).< /code> < /p>
< /blockquote>
«имело большое значение», предложение приводит к другой ошибке, < /p>

Type '"constructor"' cannot be used to index type 'C'.ts(2536)
.

Как проверка здравомыслия о моем понимании типа модификатора, я попробовал это, и он работает, как и ожидалось, с конкретным типом, но возвращение не специфично, поэтому я не совсем нацелен.

Код: Выделить всё

/**
* @param {typeof Component} cls
* @returns {?Component}
*/
function findComponent(cls) {}

let foo = findComponent(MyComponent);
// foo is of type Component or null
возможно ли это в JSDOC таким образом, чтобы код понял, или я должен заставлять результат каждый раз?

Подробнее здесь: https://stackoverflow.com/questions/797 ... ameter-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»