MST

星途 面试题库

面试题:TypeScript 可选参数与接口的结合使用

定义一个接口,包含多个属性,其中部分属性是可选的。然后编写一个函数,接受这个接口类型的参数,函数内根据传入参数中可选属性的存在与否执行不同逻辑。请说明在这种场景下,如何确保代码的类型安全,以及可选参数对函数灵活性的提升体现在哪里。
21.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

1. 定义接口及编写函数(以TypeScript为例)

// 定义接口
interface MyInterface {
    requiredProp: string;
    optionalProp1?: number;
    optionalProp2?: boolean;
}

// 编写函数
function myFunction(obj: MyInterface) {
    if (obj.optionalProp1) {
        console.log(`optionalProp1 exists with value: ${obj.optionalProp1}`);
    } else {
        console.log('optionalProp1 does not exist');
    }

    if (obj.optionalProp2) {
        console.log(`optionalProp2 exists with value: ${obj.optionalProp2}`);
    } else {
        console.log('optionalProp2 does not exist');
    }
}

2. 确保代码类型安全

  • 静态类型检查:在强类型语言如TypeScript中,接口定义了明确的类型结构。编译器会在编译阶段检查传入函数的参数是否符合接口定义。如果传入的对象缺少requiredProp,或者包含接口未定义的属性,编译器会报错,从而在开发阶段发现类型错误。
  • 运行时检查:对于可选属性,在函数内部通过if语句检查属性是否存在后再使用,可以避免运行时因访问不存在的属性而导致的错误。例如,if (obj.optionalProp1)确保了在使用optionalProp1之前它是存在的。

3. 可选参数对函数灵活性的提升

  • 适应性增强:函数可以接受具有不同属性组合的对象作为参数,而不必为每种可能的属性组合编写多个重载函数。例如,有些调用者可能只关心requiredPropoptionalProp1,而另一些调用者可能还需要设置optionalProp2。函数可以统一处理这些不同情况。
  • 向后兼容性:在软件的迭代开发中,如果需要为接口添加新的属性,已有的函数调用可以继续工作,只要调用者不使用新添加的可选属性。这使得代码在扩展时更加灵活,不会因为新需求而破坏现有的功能。