如何告诉TypeScript编译器此模块已定义?

时间:2019-05-01 22:05:40

标签: typescript aws-lambda tsconfig

我有这个本地TypeScript文件,该文件在部署时最终位于服务器的/opt目录中。因此,如果文件位于本地layers/websocketapi/DataSender.ts,则将其部署到opt/DataSender.js。 但是,当我在本地开发该项目时,它不在我的opt目录中,因此Typescript抱怨它找不到此模块。但是,如果我将其更改为引用本地版本,则部署将中断,因为它不再引用服务器上实际位于的/opt目录。

如果我使用// @ts-ignore注释,错误消失了,但是我没有得到类型支持,并且它假定类型为any

这是我的代码:

import { APIGatewayEvent } from 'aws-lambda';
// @ts-ignore
import DataSender from '/opt/DataSender';

export async function handler(event: APIGatewayEvent) {
  const dataSender = new DataSender();
  await dataSender.sendData(event.requestContext.connectionId!, { message: 'hi!' })
  return {
    statusCode: 200,
    body: 'Game created'
  }
}

如何告诉Typescript编译器我从opt目录导入的文件实际上位于layers/websocketapi/DataSender.js,但不更改import语句?

1 个答案:

答案 0 :(得分:0)

您可以在paths文件中添加tsconfig.json映射,以将导入路径/opt/*映射到真实路径layers/websocketapi/*

{
  "compilerOptions": {
    ...
    "baseUrl": ".",
    "paths": {
        "/opt/*": ["layers/websocketapi/*"]
    }
  }
  ...
}

相对于baseUrl解析了路径,有关路径映射的更多信息可以在打字稿文档https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping中找到