Типизированный массив в Javascript
Я хочу создать типизированный массив в Javascript.
Например, когда я создаю такой класс:
export default class AnalyticData {
constructor(collection = []) {
return collection.map((item) => new AnalyticDatum(item))
}
}
и после того, как я сделаю myData = new AnalyticData()
, тип myData будет Array, а не AnalyticData
Кто-нибудь знает, как убедиться, что у меня есть тип AnalyticData
, а не массив?
Я спрашиваю об этом потому что в моем компоненте vue у меня есть это:
props: {
analyticData: {
type: AnalyticData,
required: true,
},
},
И вот это предупреждение :
[Vue warn]: Invalid prop: type check failed for prop "analyticData". Expected AnalyticData, got Array
Кто-нибудь знает, как создать typed Array
в JS
?
Ответы - Типизированный массив в Javascript / Typed Array in Javascript

02.12.2020 07:07:12
Я не знаю, является ли AnalyticDatum
опечаткой, но вы можете иметь пользовательские типы, используя extends
.
export default class AnalyticData extends Array {
constructor(collection = []) {
super().push(...collection);
}
};
Если AnalyticDatum
вместо этого является другим классом для определения элементов AnalyticData
, вы все равно можете использовать процедуру map(...)
:
export default class AnalyticData extends Array {
constructor(collection = []) {
super().push(...collection.map(item => new AnalyticDatum(item)));
}
};
В обоих случаях new AnalyticData
будет экземпляром AnalyticData
, так что независимо от того, какая проверка типов у вас там есть, проблем быть не должно.

02.12.2020 07:11:43
Вы можете легко создавать числовые массивы в javascript, как описано в MDN. Для массива объектов это не так просто, и если вы помещаете в них динамические данные (например, строки), вам придется зарезервировать место для этих данных. Это как-то низкоуровнево, я бы не рекомендовал его для проекта javascript.
Я предлагаю использовать typescript (если это имеет смысл в вашем проекте). Типизированный программирования TypeScript-это легко:
interface AnalyticDatum {
date: Date;
info: string;
}
const data: AnalyticDatum[] = [{
date: new Date("2019-07-27"),
info: 'Some text',
},{
date: new Date("2019-09-24"),
info: 'Some other text',
}];
data.push({
date: new Date("2019-12-27"),
info: 'New entry',
});
console.log(data);