Javascript中的类型化数组
我想用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 有人知道
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),因此道具验证将其视为一个数组