Я поддерживаю библиотеку потоков данных, которая позволяет программистам определять новые свойства во время создания экземпляров, а затем делает аккуратные вещи во время выполнения с чтением и записью свойств, все прозрачно благодаря JS defineProperty
. Пример использования, где TagSession
определяется с помощью ключевого слова ES6 class
:
const sithApp = new TagSession( null, 'SithTrakSession',
{
obiTrakker: cF( c => new WebSocket('ws://localhost:4000')
.onmessage = msg => c.md.obiLoc = JSON.parse(msg.data)),
obiLoc: cI( null),
sithIds: cI([-1,-2,3616,-3,-4])
});
Теперь я могу написать код, в котором ключевые слова карты являются прозрачными средствами доступа:
function SithTrak () {
return div({class: "app-container"},
h1({
class: "css-planet-monitor",
content: cF(c => "Obi-Wan currently on " +
(sithApp.obiLoc ?
sithApp.obiLoc.name : "...dunno"))
}))
}
Это прекрасно работает без компиляции и с Google Closure SIMPLE_OPTIMIZATION, но ADVANCED_COMPILATION предупреждает (и вывод не удается), например:
WARNING - Property obiLoc never defined on TagSession
withObi: cF( c=> c.md.info && sithApp.obiLoc
Я рассмотрел все аннотации, которые могут применяться, но, похоже, ничто не подходит для такой динамической возможности.
Я что-то упускаю из виду или это сочетание динамизма и оптимизации требует слишком много?