const articleDB = new DB(json);
console.log(articleDB.get(1));
articleDB.delete(1);
for(const article of articleDB.byTagIterator('oracle')) {
console.log(article)
}
saveToFile(articleDB.toJSON());
Object.keys({2:0, 3:0, 1:0}) // ['1', '2', '3']
, возможно этот факт тебе чем-то поможет. ну вот нихрена не так.а ты руками замерь. Хз что у них там на самом деле значат ops/sec.
unshift
- неоптимально. А вот добавить один элемент в уже имеющийся массив от push
неотличимо.хотя вид классов не интуитивно понятный этому не способствует
class DB {
constructor(json) {
// начальная подготовка структуры
}
toJSON() {
// экспорт структуры для сохранения
}
reversed() {}
reversedIterator() {}
byTag(tag) {}
byTagIterator(tag) {}
add(record) {}
get(id) {}
delete(id) {}
}
const isPosts = (posts: unknown): posts is Posts => !!posts
&& typeof posts === 'object'
const isPosts = (posts: unknown): posts is Posts => !!posts
&& typeof posts === 'object'
//&& ...
Posts
, а не "какой-то объект" и вообще не какая-то неведомая хрень.Posts
. onloadend
на классический onload
.картинка.src =
и картинка.onload =
- возможно событие отрабатывает прямо при присваивании, т.к. ничего грузить не надо(хотя и те должно бы). let num = 0;
не помешает тебе далее по коду сделать num = { foo: 'bar' }
или даже num = funcion() {}
.props.name
будет только то, что придёт с сервера - то можно забить и так и писать.{
'story': {
header: string;
page: {
tag: string;
image_src: string;
image_alt: string;
}[];
};
}
"story"
. Соответственно ты не можешь обращаться к нему никак иначе чем через blogPosts.story
(blogPosts["story"]
).props.name
должен лежать тип "story"
, а не string
.undefined
при этом уверенно думая, что у тебя там Post
.type Posts = {
[key: string]: Post
}
ты говоришь тайпскрипту "при обращении по любому строковому ключу мне гарантировано вернётся Post
". Т.е. ты снимаешь с тайпскрипта ответственность и берёшь её на себя.
Ограничения для локальных файлов не продиктованы никакой спецификацией или очевидной логикой, они продиктованы особенностями конкретных реализаций конкретных браузеров и желаниями левой пятки произвольных разработчиков. Именно потому я и рекомендую забыть о локальных файлах.