Javascript 在typescript中定义对象数组

Javascript 在typescript中定义对象数组,javascript,typescript,Javascript,Typescript,我想在typescript中定义一个对象数组: const a=[{ 姓名:1,, 年龄:2岁, car1:8, car2:8, car3:8, 姓名4:1, 年龄4:2, car41:8, car42:8, car34:8, }, { 姓名:1,, 年龄:2岁, car1:8, car2:8, car3:8, 姓名4:1, 年龄4:2, car41:8, car42:8, car34:8, } ] const fun=(对象:数组)=>{ 控制台日志(obj) } 乐趣(a),使用对象可能有

我想在typescript中定义一个对象数组:

const a=[{
姓名:1,,
年龄:2岁,
car1:8,
car2:8,
car3:8,
姓名4:1,
年龄4:2,
car41:8,
car42:8,
car34:8,
},
{
姓名:1,,
年龄:2岁,
car1:8,
car2:8,
car3:8,
姓名4:1,
年龄4:2,
car41:8,
car42:8,
car34:8,
}
]
const fun=(对象:数组<对象>)=>{
控制台日志(obj)
}
乐趣(a)
,使用
对象可能有点懒惰

假设数组中的所有对象都具有相同的属性,可以这样解决此问题:

用户与汽车的接口{
名称:编号;
年龄:人数;
//所有其他财产
}
const fun=(objectArray:Array):void=>{
log(objectArray);
}
如果所有对象都是相同类型的,您甚至可以创建一个类(实际上应该是这样):

class UserWithCars{
名称:编号;
年龄:人数;
//所有其他财产
构造函数(/*etc*/){
//构造函数操作
}
}
const fun=(objectArray:Array):void=>{
log(objectArray);
}

问题的解决方案取决于您要在其中编程的场景!。下面是代码中可能出现的一些场景

定义对象并从中推断其关键点

const persons=[
{姓名:“约翰”,年龄:12},
{姓名:“本”,年龄:20}
];
const fun=(信息:人员类型)=>{
//你将在这里获得智能感知
console.log(信息[0].name);
};
如果希望对象具有固定键,则可以在这种情况下使用类型和接口

interface-IPerson{
id?:字符串;//id是可选的(使用?运算符)
name:string;//名称是必需的
年龄:人数;
}
常数人:数组=[
{姓名:“约翰”,年龄:12},
{姓名:“本”,年龄:20}
];
//两者都是相同的:数组===IPerson[]
const fun=(信息:数组)=>{
//你将在这里获得智能感知
console.log(信息[0].name);
};
您希望对象具有固定键,并且希望提供部分信息

interface-IPerson{
id?:字符串;//id是可选的(使用?运算符)
name:string;//名称是必需的
年龄:人数;
}
常数人:数组=[
{name:“John”},//你能做到。
{姓名:“本”,年龄:20}
];
//两者都是相同的:数组===IPerson[]
康斯特乐趣=(信息:部分[])=>{
//你将在这里获得智能感知
console.log(信息[0].name);
};
另外,Typescript不支持运行时类型检查,它只支持编译类型的类型检查

为了在运行时进行验证,您可以按如下方式实现该函数:

const是有效的\u person=(person:any):布尔=>{
返回(
个人类型==“对象”&&
typeof person.name==“字符串”&&
typeof person.age==“number”&&
person.name.length>=5&&
person.age>=1
);
};
log(“Is person valid:”,Is_valid_person({}));
日志(“是人有效:”,是人有效(“无效人”);
我希望上述方法之一能解决你的问题

在我的例子中,使用以下结构是正确的:obj:Array还是应该定义对象的每个键

以上问题的答案是:

  • 您可以使用上面所示的任何一种方法,因为typescript可以帮助您编写更好的代码,并在编译时减少错误。一旦编译了程序,执行的代码就是纯Javascript。javascript不会验证您的响应

  • 以上所有模式都生成相同的
    JavaScript
    代码,因此没有性能问题


您可以创建自己的自定义对象类型:

type CustomObject = {
  name: number
  age: number
  car1: number
  car2: number
  car3: number
  name4: number
  age4: number
  car41: number
  car42: number
  car34: number
}

const arrayOfCustomObjects: CustomObject[] = [{
  name: 1,
  age: 2,
  car1: 8,
  car2: 8,
  car3: 8,
  name4: 1,
  age4: 2,
  car41: 8,
  car42: 8,
  car34: 8,
},
{
  name: 1,
  age: 2,
  car1: 8,
  car2: 8,
  car3: 8,
  name4: 1,
  age4: 2,
  car41: 8,
  car42: 8,
  car34: 8,
}
]

const fun = (objs: CustomObject[]) => {
    objs.forEach((obj) => {
        console.log(obj)
    })
}

fun(arrayOfCustomObjects)

上面所说的是一个(单个)对象的数组,这似乎没有多大意义。@YevgenGorbunkov,我只是想问一个随机的例子。例如,我的数组有5个对象,我的typescript代码是否应该像我显示的那样?我想,这里的正确模式应该是指定描述每个数组项的形状的
接口
,您能帮我吗