Javascript中的类型化数组

Javascript中的类型化数组,javascript,arrays,vue.js,class,object,Javascript,Arrays,Vue.js,Class,Object,我想用Javascript创建一个类型化数组 例如,当我创建这样的类时: export default class AnalyticData { constructor(collection = []) { return collection.map((item) => new AnalyticDatum(item)) } } 在我创建myData=new AnalyticData()之后,myData的类型是数组,而不是AnalyticData 有人知道

我想用Javascript创建一个类型化数组

例如,当我创建这样的类时:

export default class AnalyticData {
    constructor(collection = []) {
        return collection.map((item) => new AnalyticDatum(item))
    }
}
在我创建
myData=new AnalyticData()
之后,myData的类型是数组,而不是
AnalyticData

有人知道如何确保我有
AnalyticData
类型而不是数组吗

我这样问是因为在我的vue组件中我有:

    props: {
        analyticData: {
            type: AnalyticData,
            required: true,
        },
    },
因此,这一警告:

[Vue warn]: Invalid prop: type check failed for prop "analyticData". Expected AnalyticData, got Array

有人知道如何在
JS
中创建
类型化数组吗?

我不知道
AnalyticDatum
是否是打字错误,但您可以使用
扩展来自定义类型

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

在这两种情况下,
新的AnalyticData
都将是
AnalyticData
的一个实例,因此无论您在其中使用什么类型的检查器,都不会出现问题。

您可以在javascript中轻松创建数字数组。对于一个对象数组来说并不是那么容易,如果你把动态数据(比如字符串)放进去,你就必须为这些数据预留空间。这在某种程度上是低水平的,我不建议将其用于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);

有类型化数组之类的东西,但它们用于完全不同的专门用途。JavaScript中的常规数组不是类型化的;数组中的任何元素都可以包含任何类型的值。好吧,但是你认为对于
AnalyticData
prop,有可能有
AnalyticData
类型吗?如果你是用JavaScript编程的话,没有。这就是人们发明TypeScript之类的东西的原因。JavaScript变量和属性没有类型化。值有类型,但没有变量/属性。但它使用object@Ady642您不应该
从构造函数返回任何内容。这导致
myData
成为一个数组,而不是
AnalyticData
实例。但是我不知道你到底想对
.map()
的结果做什么。可能您想将其分配给属性。谢谢您的回答,但我仍然有关于数组类型的警告…那么您可能应该在vue中提交一个问题,因为
新AnalyticData
是一个
数组
,但它首先是
AnalyticData
的一个实例,所以类型检查器做错了。哦,是的,对不起,你是对的:。这是另外一回事,所以问题是,在我的Vue应用程序中,我有一个可观察到的(我认为是Vue reactivy),因此道具验证将其视为一个数组