MST

星途 面试题库

面试题:TypeScript函数重载与接口结合处理复杂业务逻辑

有一个电商场景,定义一个接口`Product`,包含`productId`(数字类型)、`productName`(字符串类型)、`price`(数字类型)和`category`(字符串类型)属性。编写一个函数`searchProducts`,通过函数重载实现以下功能:1. 只传入`category`,返回该类别下所有产品;2. 传入`category`和`price`,返回该类别下价格小于等于传入价格的产品;3. 传入`productId`,返回对应`productId`的产品。同时,要求函数实现要遵循良好的代码结构和可维护性,给出完整TypeScript代码及简要思路说明。
43.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

思路说明

  1. 首先定义Product接口,包含题目要求的属性。
  2. 使用函数重载来定义searchProducts函数,针对不同参数情况进行重载声明。
  3. 实际的函数实现部分,根据传入的参数类型判断执行不同的逻辑来返回相应的产品数据。这里假设产品数据存储在一个数组中,实际应用中可能从数据库等数据源获取。

TypeScript代码

interface Product {
    productId: number;
    productName: string;
    price: number;
    category: string;
}

// 函数重载声明
function searchProducts(category: string): Product[];
function searchProducts(category: string, price: number): Product[];
function searchProducts(productId: number): Product | undefined;

// 函数实现
function searchProducts(param1: string | number, param2?: number): Product[] | Product | undefined {
    const products: Product[] = [
        { productId: 1, productName: 'Product1', price: 100, category: 'Category1' },
        { productId: 2, productName: 'Product2', price: 200, category: 'Category1' },
        { productId: 3, productName: 'Product3', price: 150, category: 'Category2' },
        { productId: 4, productName: 'Product4', price: 50, category: 'Category2' }
    ];

    if (typeof param1 ==='string') {
        if (param2!== undefined) {
            return products.filter(product => product.category === param1 && product.price <= param2);
        } else {
            return products.filter(product => product.category === param1);
        }
    } else {
        return products.find(product => product.productId === param1);
    }
}