对象的打字稿数组

时间:2019-09-20 08:22:23

标签: arrays typescript

我正在尝试使用对象数组,我想知道我的声明是否正确?

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)
}
  • 让选项卡:Array <{“ project”:字符串,“ new”:字符串,“ old”:字符串}> = []

只知道此声明是否正确?因为我试图在TypeScript中使用对象数组

感谢您的帮助;)

1 个答案:

答案 0 :(得分:0)

Array<{"project": string, "new": string, "old": string}>很好,但是:

  1. 您可能不希望拥有一个名为new的属性(尽管此时可能已经过时了)。您可以拥有具有该名称的属性,只是在ES5之前,您不能使用关键字或保留字作为文字属性名称(x.new在ES5之前无效,在ES5及更高版本)。如果您将TypeScript编译为ES3以在真正的旧版浏览器上使用,则必须在编写x["new"]的所有地方都使用x.new才能与ES5之前的属性标识符语法兼容。

  2. 不需要引号,只需Array<{project: string, new: string, old: string}>就可以了。

  3. 我建议单独声明您的对象类型(例如,MyType),然后使用MyType[]

例如:

interface MyType {
  project: string,
  new: string, // Or possibly change this
  old: string
}

然后:

let tab: MyType[] = [];