我可以从 Lambda 层导入打字稿类型吗?

use*_*870 8 lambda typescript aws-lambda-layers

我试图在构建 Lambda 函数时使用 TypeScript,但在使用同样用 TypeScript 编写的 Lambda 层时遇到问题。

TypeScript 无法识别我的层的 /opt/nodejs/... 导入(因为它会在 SAM 或 AWS 中运行),因此我无法将我在层中定义的类型导入到我的 Lambda 函数。

我试图查看我是否能够以某种方式 npm 链接该层,但我似乎无法使其正常工作,因为导入是本地路径 '/opt/nodejs...' 而不仅仅是模块名称。

层:

export interface SomeType {
  someField: string
}
Run Code Online (Sandbox Code Playgroud)

拉姆达:

import { SomeType } from '/opt/nodejs/myLayer' // this does not work
Run Code Online (Sandbox Code Playgroud)

我刚刚收到错误消息:Cannot find module '/opt/nodejs/myLayer'.ts(2307)我发现自己不得不用它来抑制它,// @ts-ignore can be ignored as this is a Lambda layer但这意味着我无法使用层中的 TypeScript 类型。

use*_*870 10

我想我可能已经解决了这个问题,我在 tsconfig.json 中添加了 /opt/nodejs... 路径作为路径映射:

{
    "paths": {
      "/opt/nodejs/myLayer": ["../../layers/myLayer/src/some-layer-module"]
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在可以从 Layer 导入 TypeScript 类型,因为导入路径没有改变,它仍然可以在 AWS/SAM 中工作

  • 如果在此之后仍有问题,请不要忘记重新启动 IDE 或 TS 服务。我花了一个多小时的时间才找到答案。 (3认同)