Javascript 在typescript中定义对象数组
我想在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),使用对象可能有
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代码是否应该像我显示的那样?我想,这里的正确模式应该是指定描述每个数组项的形状的接口,您能帮我吗