Типизированный массив в Javascript


Типизированный массив в Javascript

02.12.2020 06:28:26 Просмотров 9 Источник

Я хочу создать типизированный массив в 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

Является ответом!
Andrea Giammarchi

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, так что независимо от того, какая проверка типов у вас там есть, проблем быть не должно.

David Lemon

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);

Запустить этот код

Помочь в развитии проекта:
Закрыть X