问题描述
我声明了一个 AddEmailToMailingList
类型
// addEmailToMailingList.ts
type SuccessResponse =
| {
success: false;
message: string;
code: number;
}
| {
success: true;
};
export type AddEmailToMailingList = (data: {
email: string;
}) => Promise<SuccessResponse>;
这是由另一个文件通过一些泛型导入和重新导出的
// types.ts
import { AddEmailToMailingList } from "./functions/addEmailToMailingList";
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type DuckFunction = (...args: any) => any;
type ThenArgRecursive<T> = T extends PromiseLike<infer U>
? ThenArgRecursive<U>
type HttpsCallable<T extends DuckFunction> = (
...args: Parameters<T>
) => Promise<{
readonly data: ThenArgRecursive<ReturnType<T>>;
}>;
export type CallableAddEmailToMailingList = HttpsCallable<AddEmailToMailingList>;
当我将这个 CallableAddEmailToMailingList
类型导入到我工作区的另一个包中时,它会正确推断类型。
这是正确的类型推断:
// VSCode type inference
(alias) type CallableAddEmailToMailingList = (data: {
email: string;
}) => Promise<{
readonly data: SuccessResponse;
}>
现在我想将类型 SuccessResponse
移动到它自己的文件中,以便其他函数可以导入和使用它。
// addEmailToMailingList.ts
import { SuccessResponse } from "@/typesInternal";
export type AddEmailToMailingList = (data: {
email: string;
}) => Promise<SuccessResponse>;
现在我导入 CallableAddEmailToMailingList
类型的包不再具有正确的类型推断,它完全失去了 SuccessResponse
是什么,它变成了 any
这是导入 CallableAddEmailToMailingList
后的类型推断:
// VSCode type inference
(alias) type CallableAddEmailToMailingList = (data: {
email: string;
}) => Promise<{
readonly data: any;
}>
但是,将鼠标悬停在声明它的 types.ts 文件中的 CallableAddEmailToMailingList
上时它仍然是正确的。
我想不出任何合乎逻辑的原因,防止它发生的唯一方法是不导入 SuccessResponse
并在与函数相同的文件中声明它。
这是 Typescript 中的错误还是我遗漏了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)