Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何告诉TypeScript编译器这个模块是在这里定义的?_Typescript_Aws Lambda_Tsconfig - Fatal编程技术网

如何告诉TypeScript编译器这个模块是在这里定义的?

如何告诉TypeScript编译器这个模块是在这里定义的?,typescript,aws-lambda,tsconfig,Typescript,Aws Lambda,Tsconfig,我有一个本地的TypeScript文件,在部署时,它最终会出现在我的服务器的/opt目录中。因此,如果文件在本地位于layers/websocketapi/DataSender.ts,它将部署到opt/DataSender.js。 然而,当我在本地开发这个项目时,它不在我的opt目录中,所以Typescript抱怨它找不到这个模块。但是,如果我将其更改为引用本地版本,那么我的部署就会中断,因为它不再引用它在服务器上实际所在的/opt目录 如果我使用//@ts ignore注释,错误会消失,但是我

我有一个本地的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,但不更改导入语句?

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


路径是相对于baseUrl解析的,有关路径映射的详细信息可以在typescript文档中找到

。您可以将图层文件夹复制到本地计算机的/opt文件夹中,或者创建一个脚本来执行此操作。请尝试尝试使用tsconfig设置。主要是baseUrl和路径。嗨,我也有同样的问题,有更新吗?
{
  "compilerOptions": {
    ...
    "baseUrl": ".",
    "paths": {
        "/opt/*": ["layers/websocketapi/*"]
    }
  }
  ...
}