Javascript 对复杂数据元素的引用
我有一个由类表示的模型 e、 g.汽车模型:Javascript 对复杂数据元素的引用,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个由类表示的模型 e、 g.汽车模型: export class Car { public name : string; public color: string; public power : number; public service : boolean; } 汽车存储在一个列表中 cars : Array <Car>; 将传递值,而不是函数中的引用 我可以通过数组的索引指向一辆车。对于属性,我可以使用需要解释的字符串。但我认为这不太明
export class Car
{
public name : string;
public color: string;
public power : number;
public service : boolean;
}
汽车存储在一个列表中
cars : Array <Car>;
将传递值,而不是函数中的引用
我可以通过数组的索引指向一辆车。对于属性,我可以使用需要解释的字符串。但我认为这不太明智
有更好的主意吗?来拯救(特别是索引类型)!可以以类型安全的方式修改动态属性:
interface Car {
name: string;
color: string;
power: number;
service: boolean;
}
class CarContainer {
public cars: Car[] = [];
updateCar<K extends keyof Car, V extends Car[K]>(index: number, key: K, value: V) {
let selectedCar = this.cars[index];
if (selectedCar) {
selectedCar[key] = value;
}
}
}
let c = new CarContainer();
c.cars.push({
name: "Old Jalopy",
color: "black",
power: 0,
service: false,
});
// Time for a power upgrade!
c.updateCar(0, "name", "Tesla Roadster");
c.updateCar(0, "power", 100000000);
接口车{
名称:字符串;
颜色:字符串;
功率:数字;
服务:布尔;
}
类集装箱{
公共汽车:汽车[]=[];
updateCar(索引:number,键:K,值:V){
让selectedCar=this.cars[index];
如果(所选车辆){
selectedCar[键]=值;
}
}
}
设c=新的CarContainer();
c、 汽车。推({
名称:“老老爷车”,
颜色:“黑色”,
功率:0,
服务:假,
});
//是时候升级电源了!
c、 updateCar(0,“名称”,“特斯拉跑车”);
c、 updateCar(0,“功率”,100000000);
拯救(特别是索引类型)!可以以类型安全的方式修改动态属性:
interface Car {
name: string;
color: string;
power: number;
service: boolean;
}
class CarContainer {
public cars: Car[] = [];
updateCar<K extends keyof Car, V extends Car[K]>(index: number, key: K, value: V) {
let selectedCar = this.cars[index];
if (selectedCar) {
selectedCar[key] = value;
}
}
}
let c = new CarContainer();
c.cars.push({
name: "Old Jalopy",
color: "black",
power: 0,
service: false,
});
// Time for a power upgrade!
c.updateCar(0, "name", "Tesla Roadster");
c.updateCar(0, "power", 100000000);
接口车{
名称:字符串;
颜色:字符串;
功率:数字;
服务:布尔;
}
类集装箱{
公共汽车:汽车[]=[];
updateCar(索引:number,键:K,值:V){
让selectedCar=this.cars[index];
如果(所选车辆){
selectedCar[键]=值;
}
}
}
设c=新的CarContainer();
c、 汽车。推({
名称:“老老爷车”,
颜色:“黑色”,
功率:0,
服务:假,
});
//是时候升级电源了!
c、 updateCar(0,“名称”,“特斯拉跑车”);
c、 updateCar(0,“功率”,100000000);
如果您的汽车对象没有任何功能,请使用接口而不是类。使用javascript数组cars:Car[]
。然后,您将能够简单地cars[0]。name=…
这是一个非常广泛的问题。这真的取决于你想做什么。我唯一的建议是阅读JavaScript中的不可变对象,以及变异对象的更改检测问题。如果您的Car对象没有任何函数,则使用接口而不是类。使用javascript数组cars:Car[]
。然后,您将能够简单地cars[0]。name=…
这是一个非常广泛的问题。这真的取决于你想做什么。我唯一的建议是阅读JavaScript中的不可变对象,以及变异对象的变化检测问题。