首页 > 解决方案 > 如何跨模块共享 TypeScript 重载?

问题描述

我想为这个函数的不同实现重用一个函数的一些重载。就我而言,我有两个版本的 API,其中第二个版本允许更多行为。我尝试了很多东西,其中最接近的似乎是使用环境函数声明(可能还有环境模块)。

我目前的状态是这样的:

// fn-overloads-v1.ts
export declare function fn(arg: 'int'): number;
export declare function fn(arg: 'string'): string;
// fn-v1.ts
export * from './fn-overloads-v1.ts';
export function fn(arg: 'int' | 'string'): number | string {
  // do something
}
// fn-overloads-v2.ts
export * from './fn-overloads-v1.ts';
export declare function fn(arg: 'bool'): bool;
// fn-v2.ts
export * from './fn-overloads-v2.ts';
export function fn(arg: 'int' | 'string' | 'bool'): number | string | bool {
  // do something
}

不幸的是,这不会导致预期的结果。在下面我想a成为 type bool,但它是 type number | string | bool

import { fn } from './fn-v2';

const a = fn('bool'); // expect a to be of type bool

非常欢迎提出想法!

标签: typescriptoverloading

解决方案


推荐阅读