如果一个函数fn,他接收一个参数1,那么fn返回的类型是a,如果是2 fn返回的是b,用ts如何标注

77 阅读1分钟

在 TypeScript 中,你可以使用函数重载(Function Overloads)来描述这种根据不同参数返回不同类型的函数。以下是具体的示例代码:

typescript

// 定义类型a和b
type a = { type: 'a' };
type b = { type: 'b' };

// 函数重载声明
function fn(arg: 1): a;
function fn(arg: 2): b;

// 函数实现
function fn(arg: 1 | 2): a | b {
    if (arg === 1) {
        return { type: 'a' } as a;
    } else {
        return { type: 'b' } as b;
    }
}

// 调用函数并进行类型检查
const result1 = fn(1);
console.log(result1.type); // 这里result1的类型是a,所以可以访问type属性

const result2 = fn(2);
console.log(result2.type); // 这里result2的类型是b,所以可以访问type属性

在上述代码中:

  1. 首先定义了类型 a 和 b,分别表示不同的对象结构。
  2. 然后使用函数重载声明了 fn 函数的两种不同签名,当参数为 1 时返回 a 类型,当参数为 2 时返回 b 类型。
  3. 接着实现了 fn 函数,根据传入的参数返回相应类型的对象。
  4. 最后通过调用 fn 函数并传入不同的参数,TypeScript 会根据传入的参数自动推断返回值的类型,从而在后续使用中进行类型检查。