ну вот нихрена не так.а ты руками замерь. Хз что у них там на самом деле значат 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
". Т.е. ты снимаешь с тайпскрипта ответственность и берёшь её на себя. instanceof
и т.п. Вообще хоть какой-то способ получить аргументы конструктора класса User есть?
constructor
. Метод с точки зрения js - это просто функция. Имена аргументов функции ни на что снаружи не влияют, и просто являются по сути мапингом по порядку в переменные внутри функции. Имена аргументов функции никак не доступны - точно также, как недоступны поля класса. Единственное что доступно - поле length
функции содержащее количество аргументов(но и оно не учитывает, не может учитывать, ...spread
параметры или использование arguments
).Ctor.toString()
и спарсить их из полученной текстовой репрезентации. Только вид этой текстовой репрезентации ничем не гарантирован(хоть и на данный момент вроде идентичен средь браузеров) и применять такое в проде нельзя.:)AxiosResponse
поле data
имеет неизвестный тип. По умолчанию и для удобства - any
, но на самом деле хрен знает, что там с сервера пришло. Нет там никакого constrictor
точно, потому, что если и придёт там объект - это будет простой примитивный объект.В javascript нет механизма получения полей класса
Забавный(на самом деле отвратительный) факт: числовые ключи объекта в js всегда идут первыми и в отсортированом виде, все остальные - по мере добавления:
Object.keys({2:0, 3:0, 1:0}) // ['1', '2', '3']
, возможно этот факт тебе чем-то поможет.