如何在TypeScript中声明交叉类型的对象数组?
TypeScript交叉类型数组的正确声明方式
你之前的写法出错是因为TypeScript的类型运算符优先级问题——&的优先级比数组符号[]低,所以User & {RegistrationDate:Date}[]会被解析成User和一个{RegistrationDate:Date}类型数组的交叉,这显然不是你要的结果。
要正确声明交叉类型的对象数组,有两种常用方式:
方式一:用括号包裹交叉类型后加数组符号
直接把完整的交叉类型用括号括起来,再添加数组标识,就能明确表示这是一个由交叉类型对象组成的数组:
type User = { Name: string; }; // 声明空数组,后续按需填充 const registeredUsers: (User & { RegistrationDate: Date })[] = []; // 示例:添加符合类型的对象 registeredUsers.push({ Name: "Alice", RegistrationDate: new Date() });
方式二:先定义交叉类型别名,再声明数组
如果这个交叉类型需要多次使用,先定义一个类型别名会让代码更清晰:
type User = { Name: string; }; // 定义交叉类型的别名 type RegisteredUser = User & { RegistrationDate: Date }; // 声明该类型的空数组 const registeredUsers: RegisteredUser[] = []; // 示例:填充数据 registeredUsers.push({ Name: "Bob", RegistrationDate: new Date("2024-01-01") });
内容的提问来源于stack exchange,提问作者Giorgi Gvimradze
相关产品推荐
相关产品推荐

