🔎 搜索词
TS2383, 函数重载,模块增强
🕗 版本与回归信息
- 这会导致崩溃
- 在3.2.4之前,你会得到 "TS2484: 导出声明与 'get' 的导出声明冲突。"
⏯ Playground链接
https://github.com/eps1lon/tsc-augment-overload
💻 代码
// library.d.ts
declare function get(): string;
declare function set(value: string): void;
export { get, set };
// app.d.ts
import "library";
declare module "library" {
function get(): string | null;
}
// index.ts
import { get, set } from "library";
// module augmentation did work
const value = get();
// ^? string | null
// @ts-expect-error Argument of type 'string | null' is not assignable to parameter of type 'string'.
set(value);
🙁 实际行为
$ yarn tsc --skipLibCheck false
app.d.ts:4:12 - error TS2383: Overload signatures must all be exported or non-exported.
4 function get(): string | null;
~~~
Found 1 error in app.d.ts:4
🙂 预期行为
由于模块增强似乎已经起作用,没有错误。
关于问题的附加信息
作为解决方法,我们可以切换到
-function get(): string
+export function get(): string
-export {get}
尽管这似乎像是TypeScript强制执行某种代码风格。一些团队更喜欢写一个单一的 export {}
语句。
3条答案
按热度按时间g9icjywg1#
我猜想这个论点是,这应该可以工作,因为原始库中写的是
export { get }
而不是单独导出函数。但那是一个实现细节——它不应该能够影响增强文件如何被允许写入。kzipqqlq2#
我猜想这个论点是,这应该可以工作,因为原始库写的是导出 { get } 而不是单独导出函数。但那是一个实现细节——它不应该能够影响如何允许写入增强文件。
如果我们可以在模块增强中实际写出
export {}
,我会觉得没问题,但我们不能。我们得到了这两个错误:Playground Link
wfsdck303#
@eps1lon 我也遇到了这个问题(
Exports and export assignments are not permitted in module augmentations.
),当想要从一个模块重新导出类型到全局时。