74339


今、 firebase functions を typescript で記述しています。その結果、例えば以下のような index.ts ができあがります。

[code]

    import * as functions from 'firebase-functions';
    
    export const func1 = functions.https.onRequest((req, res) => ...)
    export const func2 = functions.https.onRequest((req, res) => ...)
    
[/code]

今、 functions に載せる載せないはデプロイの問題なので、この構造を別ファイルに定義しておいて、それを利用して上記と同等の export を
index.ts で実行したいと思っています。

具体的には、

[code]

    // myfunctions.ts
    import * as functions from 'firebase-functions';
    
    const MyFunctions = {
      func1: functions.https.onRequest((req, res) => ...),
      func2: functions.https.onRequest((req, res) => ...)
    };
    
    export default MyFunctions;
    
[/code]

に関数定義を切り出せたとしたとき、

[code]

    // index.ts
    import MyFunctions from 'myfunctions';
    
    // MyFunctions を利用して以下と等価な export を行いたい
    // export const func1 = MyFunctions.func1
    // export const func2 = MyFunctions.func2
    
[/code]

のコメント部分を、 myfunctions
定義におけるキーのの増減に従って勝手に調整されるようにしたいと思っています。これは、どうやったら実現できますでしょうか。

**追記**

勝手に調整とは、例えば func3 を生やしたいときに、その際に必要になるのは myfunctions.ts の MyFunctions
のオブジェクトだけであり、 index.ts は特に触らずとも func3 を index.ts にて export したことになること、です。


CC BY-SA 4.0
2021-02-03T11:07:42.833
73778
2021-03-01T09:35:37.160
2021-02-03T13:35:58.260
754
754
question
javascript typescript
typescript でキーをプログラムで指定しながら export したい


index.tsを経由してmyfunctinons.tsの実装をexportしたいとお見受けしました。  
スマートな回答としては以下のようになります。

[code]

    // myfunctions.ts
    import * as functions from 'firebase-functions';
    
    export const func1 = functions.https.onRequest((req, res) => ...);
    export const func2 = functions.https.onRequest((req, res) => ...);
    
[/code]

index.tsからexportする方法は以下の3通り

[code]

    // パターン1: named exportを利用する
    // https://www.typescriptlang.org/docs/handbook/modules.html#export-all-as-x
    export * as MyFunctions from "./myfunctions";
    
    // パターン2: myfunctionsそのものをそのままexportする。使う側でどういった名前にするかを委ねる
    export * from "./myfunctions";
    
    // パターン3: named exportを使わない場合
    import * as MyFunctions from "./myfunctions";
    export { MyFunctions };
    
[/code]

`MyFunctions`というオブジェクトを生成せずとも、importする側で名前を決めることができます。


CC BY-SA 4.0
2021-02-04T07:24:15.977
73794
2021-02-04T07:24:15.977
7997
73778
answer


自分が欲しかったものは、 `export =` の記法である、ということに気付きました。

[code]

    // myfunctions.ts
    import * as functions from 'firebase-functions';
    
    export = {
      func1: functions.https.onRequest((req, res) => ...),
      func2: functions.https.onRequest((req, res) => ...)
    }
    
[/code]

これを用いて、

[code]

    import functions = require("./myfunctions");
    
    export = functions
    
[/code]


CC BY-SA 4.0
2021-03-01T09:35:37.160
74339
2021-03-01T09:35:37.160
754
73778
answer