0

我正在使用typescript-fsa像这样创建一个动作

const action = actionCreator<{ name: string }>('actionName'); // returns ActionCreator<{ name: string }>
export action;

有一个辅助方法(在另一个文件中)作为回调传递并接受options类型{ name: string }

export type Options = { name: string }; // duplicate declaration

const doSomething = (options: Options) => { action(options) };

由于添加新密钥Options需要我在两个文件中进行更改,所以我想创建一个实用程序,通过在 Typescript 中使用“推断”关键字/功能来提取有效负载类型。

type GetActionPayloadType<T> = T extends ActionCreator<infer E> ? E : never;

export type Options = GetActionPayloadType<typeof action>;

这就像一个魅力!

现在,下一步是使其全球可用。因此,当我转到项目的类型声明文件并将相同的代码移到那里时,ActionCreator类型为unknown

我检查了 typescript-fsa 库中的类型定义文件,他们已经导出了该类型,但没有使其在全局命名空间中可用。

使用import { ActionCreator } from 'typescript-fsa'in*.d.ts文件会破坏它。

但是,导入在*.ts文件中按预期工作。

有没有正确的方法来做到这一点?

4

0 回答 0