MST

星途 面试题库

面试题:TypeScript泛型函数结合类型约束实现复杂业务逻辑

假设你有一个电商系统,有产品(`Product`)接口、用户(`User`)接口和订单(`Order`)接口。`Product` 有属性 `id`(字符串)、`name`(字符串)、`price`(数字);`User` 有属性 `id`(字符串)、`name`(字符串)、`email`(字符串);`Order` 有属性 `id`(字符串)、`product`(`Product` 类型)、`user`(`User` 类型)、`quantity`(数字)。编写一个泛型函数 `processOrder`,它接受一个订单数组和一个处理器函数作为参数。处理器函数根据不同的业务规则处理订单,比如计算订单总价等。泛型函数需要根据不同的业务逻辑返回不同的结果类型,且要使用类型约束确保传入的处理器函数符合要求。请实现该泛型函数及相关类型定义。
16.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义Product接口
interface Product {
  id: string;
  name: string;
  price: number;
}

// 定义User接口
interface User {
  id: string;
  name: string;
  email: string;
}

// 定义Order接口
interface Order {
  id: string;
  product: Product;
  user: User;
  quantity: number;
}

// 定义处理器函数的类型约束
type OrderProcessor<T> = (order: Order) => T;

// 实现泛型函数processOrder
function processOrder<T>(orders: Order[], processor: OrderProcessor<T>): T[] {
  return orders.map(processor);
}

// 示例处理器函数:计算订单总价
const calculateTotalPrice: OrderProcessor<number> = (order) => {
  return order.product.price * order.quantity;
};

// 使用示例
const orders: Order[] = [
  {
    id: '1',
    product: { id: 'p1', name: '商品1', price: 10 },
    user: { id: 'u1', name: '用户1', email: 'user1@example.com' },
    quantity: 2
  },
  {
    id: '2',
    product: { id: 'p2', name: '商品2', price: 15 },
    user: { id: 'u2', name: '用户2', email: 'user2@example.com' },
    quantity: 3
  }
];

const totalPrices = processOrder(orders, calculateTotalPrice);
console.log(totalPrices); // 输出: [20, 45]