我正在尝试使用对象数组,我想知道我的声明是否正确?
public async list(){
myObj1 = {
"name": "John",
"age": "45",
"car": 20,
"test": 30,
"example": 20
};
myObj2 = {
"name": "John",
"age": "30",
"car": 10,
"example": 10
};
let tab: Array<{"project": string, "new": string, "old": string}> = []
// find keys
keyObj1 = Object.keys(myObj1);
keyObj2 = Object.keys(myObj2);
// find max length to iterate
if (keyObj1.length > keyObj2.length) {
var biggestKey = keyObj1;
} else {
var biggestKey = keyObj2;
}
// now compare their keys and values
for (var i = 0; i < biggestKey.length; i++) {
var key = biggestKey[i];
if (myObj1[key] != myObj2[key]) {
tab.push({
"project": key,
"new": myObj1[key],
"old": myObj2[key]
})
}
//console.log(tab)
}
只知道此声明是否正确?因为我试图在TypeScript中使用对象数组
感谢您的帮助;)
答案 0 :(得分:0)
Array<{"project": string, "new": string, "old": string}>
很好,但是:
您可能不希望拥有一个名为new
的属性(尽管此时可能已经过时了)。您可以拥有具有该名称的属性,只是在ES5之前,您不能使用关键字或保留字作为文字属性名称(x.new
在ES5之前无效,在ES5及更高版本)。如果您将TypeScript编译为ES3以在真正的旧版浏览器上使用,则必须在编写x["new"]
的所有地方都使用x.new
才能与ES5之前的属性标识符语法兼容。
不需要引号,只需Array<{project: string, new: string, old: string}>
就可以了。
我建议单独声明您的对象类型(例如,MyType
),然后使用MyType[]
。
例如:
interface MyType {
project: string,
new: string, // Or possibly change this
old: string
}
然后:
let tab: MyType[] = [];