我有一个由类表示的模型。
例如汽车的型号:
export class Car
{
public name : string;
public color: string;
public power : number;
public service : boolean;
}
汽车存储在列表中。
cars : Array <Car>;
现在我想拥有一个可以更改汽车属性的函数。
例如第一辆车的颜色或第二辆车的名称。
引用汽车及其属性作为该函数的参数的最佳方法是什么?
据我所知
cars [0].name
将传递值而不是函数内部的引用。
我可以通过数组的索引指向汽车。对于属性,我可以采用需要解释的字符串。但是我认为那不是很聪明。
还有更好的主意吗?
答案 0 :(得分:2)
Advanced Types进行抢救(特别是索引类型)!您可以通过类型安全的方式修改动态属性:
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);