关于 Javascript / TypeScript 模块、导出、导入和函数/对象声明的问题

Question about Javascript / TypeScript modules, exporting, importing and function / object declarations

提问人:jjunsa 提问时间:10/29/2023 最后编辑:jjunsa 更新时间:10/29/2023 访问量:46

问:

我是 TypeScript 的新手,也是一般模块的新手。这是一个文件/模块,我需要一些关于到底发生了什么的指导:

export default function MyAdapter (client: Pool): AdapterType {
  return {
    async foo (
      bar: barType
    ): Promise<returnType> {
      ...
      return Promise<returnType>;
    },
    async myFunc ({
      param1,
      param2
    }: {
      param3: string
      param4: string
    }): Promise<returnType2> {
      ...
      return Promise<returnType2>;
    },
  }
}

我正在导入并尝试做这样的事情:

import MyAdapter from "./adapter";

const pool = new Pool(...);

export default async function handler() {
  const val = await MyAdapter(pool).foo(bar);
  ....
}

但是在进行 tsc 转译时出现以下 TypeScript 错误:

src/app/api/path/route.ts:14:12 - error TS2722: Cannot invoke an object which is possibly 'undefined'.

14      await MyAdapter(pool).foo(bar);
              ~~~~~~~~~~~~~~~~~~~~~~~~~

我很确定我做错了,因为我对 TypeScript 的基本和基础或模块的工作方式一无所知。

另外,关于如何使用顶部返回块中的嵌套函数声明 Adapter 函数的表示法是什么?

JavaScript 节点 .js 打字稿 承诺

评论

1赞 Bergi 10/29/2023
TypeScript 到底在哪里抱怨?
1赞 Bergi 10/29/2023
"关于如何使用顶部返回块中的嵌套函数声明 Adapter 函数的表示法是什么?- 方法定义语法
0赞 jjunsa 10/29/2023
@Bergi 在进行 tsc 转译时抱怨
1赞 Bergi 10/30/2023
我无法复制。到底是什么?其中是否将方法声明为可选方法?AdapterType
1赞 Bergi 10/30/2023
如果该类型不能忠实地表示对象,则不要使用该类型,或者使用非 null 断言

答:

-1赞 Nested Gateway 10/29/2023 #1

Typescript 中的模块导出和导入与 JavaScript 相同。但是,您需要指定您尝试在另一个文件中导入的模块不能是 的类型。undefined

评论

0赞 Community 10/30/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。