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