导入后键入别名解析为 any

问题描述

我声明了一个 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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...