首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在typescript中导出函数

如何在typescript中导出函数
EN

Stack Overflow用户
提问于 2021-02-25 06:47:37
回答 2查看 262关注 0票数 0

打字新手。我正在做一个cdk项目。我有一个类(堆栈)正在变得越来越庞大。所以我想把一些方法卸载到其他文件中,以保持它的可管理性。

这是可行的:

代码语言:javascript
复制
import * as cdk from '@aws-cdk/core';
import * as lambda        from '@aws-cdk/aws-lambda';                // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';

const TAG = "sn-v1-";

export class SnProdStack extends cdk.Stack {
    constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
      super(scope, id, props);

      // Lambda: Get stuff from Sigfox API
      // ---------------------------------
      
      const testLambda = new lambda_nodejs.NodejsFunction(this, 'sigfox-get', {
        runtime: lambda.Runtime.NODEJS_12_X,
        entry: 'lambda/sn-prod/sigfox-get.js',
        handler: 'handler',
        functionName: TAG + 'sigfox-get',
        description: 'Get all devices from Sigfox API.',
        memorySize: 256,
        timeout: cdk.Duration.seconds(360)
      });
    }
}

但我想做这样的事情:

代码语言:javascript
复制
// class file
import * as cdk from '@aws-cdk/core';
import * as lambda        from '@aws-cdk/aws-lambda';                // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';

import { genSigfoxGetLambda } from './sn-prod/api-gw';

export class SnProdStack extends cdk.Stack {
    constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
      super(scope, id, props);      
      const testLambda = this.genSigfoxGetLambda;
    }
}



// method file
import { SnProdStack } from '../sn-prod-stack';

import * as cdk from '@aws-cdk/core';
import * as lambda        from '@aws-cdk/aws-lambda';                // need for Runtime
import * as lambda_nodejs from '@aws-cdk/aws-lambda-nodejs';

const TAG = "sn-v1-";

export function genSigfoxGetLambda(this: SnProdStack) {
    const testLambda = new lambda_nodejs.NodejsFunction(this, 'sigfox-get', {
        runtime: lambda.Runtime.NODEJS_12_X,
        entry: 'lambda/sn-prod/sigfox-get.js',
        handler: 'handler',
        functionName: TAG + 'sigfox-get',
        description: 'Get all devices from Sigfox API.',
        memorySize: 256,
        timeout: cdk.Duration.seconds(360)
      });
      return testLambda;
}

这是一个极小的可重现的例子。整个代码是巨大的,每件事都有10到20个。我的计划是对我需要进行的每种类型的绑定使用工厂方法,并传入一个options对象。现在,问题是我写的代码什么也不做。

EN

回答 2

Stack Overflow用户

发布于 2021-02-25 11:34:52

要导出函数,我们需要添加export指令,并使其可用于其当前文件夹之外的其他文件。

您已经在使用export关键字,所以现在需要做的就是在每个文件夹中放置一个index.ts文件。

例如,如果我们有这样的目录结构...

代码语言:javascript
复制
.
├── main.ts
└── module
    ├── a.ts
    └── index.ts

...and我们希望从a.ts中导出一个函数并在main.ts中使用它,然后该函数必须使用export关键字,并且index.ts必须从module/中导出它。

代码语言:javascript
复制
// a.ts
export const foo = () => { return 'bar'; };
代码语言:javascript
复制
// index.ts
export * from './a';

然后,我们可以导入函数。

代码语言:javascript
复制
// main.ts
import { foo } from './module';
票数 0
EN

Stack Overflow用户

发布于 2021-02-26 17:30:46

从你的主堆栈中尝试类似这样的东西

代码语言:javascript
复制
import cdk = require("@aws-cdk/core");
import { MyFirstStack } from "../lib/my-first-stack";
import { StepFunctionStack } from "../lib/step-function-stack";

const app = new cdk.App();
const myFirstStack = new MyFirstStack(app, "stackName");
const stepFunctionStack = new StepFunctionStack(app, "stepFunctionStackName");

// If you need to add a dependency on one of your stacks
myFirstStack.addDependency(stepFunctionStack);

然后,您可以从上面的位置导入其他堆栈,在我的示例中是它的back1文件夹和lib文件夹。

下面是其中一个堆栈的样子

代码语言:javascript
复制
import { Construct, Stack, StackProps } from "@aws-cdk/core";

export class MyFirstStack extends Stack {
  constructor(scope: App, id: string, props?: StackProps) {
    const properties: StackProps = {
      env: {
        region: "us-east-1",
        account: <account>,
      },
    };

    super(scope, id, properties);

    const lambda = create_lambda()

    create_lambda(){
    // code to create lambda etc. 
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66359911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档