MST

星途 面试题库

面试题:TypeScript第三方库类型定义开发之基础规范

在TypeScript第三方库类型定义开发中,当你定义一个函数类型时,如何确保参数和返回值的类型符合最佳实践规范?请举例说明。
13.3万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
  1. 明确参数类型
    • 使用类型别名或接口来清晰定义参数类型。例如,假设有一个函数接收两个数字并返回它们的和:
    // 使用类型别名定义参数类型
    type AddNumbersArgs = {
        num1: number;
        num2: number;
    };
    const addNumbers = ({ num1, num2 }: AddNumbersArgs): number => {
        return num1 + num2;
    };
    // 或者使用接口定义参数类型
    interface AddNumbersArgsInterface {
        num1: number;
        num2: number;
    }
    const addNumbers2 = ({ num1, num2 }: AddNumbersArgsInterface): number => {
        return num1 + num2;
    };
    
  2. 定义返回值类型
    • 在函数签名中明确指定返回值类型。上面的例子中,addNumbersaddNumbers2 函数都明确返回 number 类型。
    • 如果函数可能返回 nullundefined,也要在返回类型中体现。例如,一个函数在找不到值时返回 null
    type FindValueArgs = {
        arr: number[];
        target: number;
    };
    const findValue = ({ arr, target }: FindValueArgs): number | null => {
        const index = arr.indexOf(target);
        if (index!== -1) {
            return arr[index];
        }
        return null;
    };
    
  3. 使用泛型(如果适用)
    • 当函数逻辑不依赖于具体类型,但需要保持类型一致性时,使用泛型。例如,一个简单的 identity 函数,返回传入的值:
    const identity = <T>(arg: T): T => {
        return arg;
    };
    const result = identity<string>('hello');
    
  4. 可选参数和默认参数
    • 如果函数有可选参数,要在类型定义中体现。例如,一个函数接收一个字符串和一个可选的数字:
    type PrintMessageArgs = {
        message: string;
        count?: number;
    };
    const printMessage = ({ message, count = 1 }: PrintMessageArgs): void => {
        for (let i = 0; i < count; i++) {
            console.log(message);
        }
    };