Сообщение от webgraph
|
У меня есть сильное чувство, что её просто скоро завезут в JS.
|
Ну есть такие предложения. Но описания типов только для пишущего и читающего код. Сам движок никакой проверки производить не будет. Он будет считать такие описания комментариями. Для IDE это будет помощь. Но в принципе такое уже есть - JSDOC. VSCode вполне успешно с ним работает. Почти, как в ts (некоторые возможности не реализованы) - проверяет типы объектов, переменных, функций... Но более многословен, чем ts
Одно из преимуществ - отсутствие этапа компиляции. В небольших проектах, по мне, он нафиг не нужен.
Код передается браузеру как есть. Может быть спокойно минификирован.
Например, кусок кода с JSDOC
/**
* @typedef BiblioElemNum
* @type {{
* [id:string]:{
* elem:HTMLElement,
* num:number,
* cites:HTMLAnchorElement[],
* }
* }}
*/
/**
* @type {?BiblioElemNum}
*/
let biblioids = null;
/**
* @param {HTMLElement} elem
*/
const insertBiblioBut = (elem) => {
elem.style.position = 'relative';
const biblbut = /** @type {DocumentFragment} */ (bibliobut.cloneNode(true));
$data(
/**@type {HTMLElement}*/ ($di(biblbut, 'p-biblio-but')),
'p-biblio-id',
elem.id
);
elem.append(biblbut);
};
/**
* @param {HTMLElement} cont - контейнер с элементов библиографии
* @returns {BiblioElemNum}
*/
const findBiblios = (cont) => {
$data(cont, 'p-biblio-cont', '');
return /**@type {HTMLElement[]} */ (Array.from(cont.children)).reduce(
(a, e, i) => {
if (e.id)
a[e.id] = {
elem: e,
num: i + 1,
cites: [...getCitesById(e.id)],
};
if (a[e.id].cites.length) insertBiblioBut(e);
else
console.warn(
`Нет отсылок на элемент библиографии ${a[e.id].num} с id="${
e.id
}"`
);
return a;
},
/**@type BiblioElemNum*/ ({})
);
};
/**
* @param {string} id - id элемента библиографии
* @returns {NodeListOf<HTMLAnchorElement>}
*/
const getCitesById = (id) => {
return /**@type {NodeListOf<HTMLAnchorElement>} */ (
$a(`a.${crefbiblio}[href="#${id}"]`)
);
};