如何在打字稿中导入和使用JavaScript节点模块

时间:2019-11-18 05:15:45

标签: typescript firebase

在我的代码中,我正在使用javascript firebase模块

const FirebaseStore = require('connect-session-firebase')(session)

导入它并在打字稿中使用它的正确方法应该是什么?

2 个答案:

答案 0 :(得分:0)

首先,您应该安装Connect Session Firebase,我认为您已经完成了。

如果没有,请运行:npm install firebase-admin connect-session-firebase --save


现在已经安装了Connect Session Firebase,您可以开始使用它了。

您还需要一个中间件...我更喜欢在Firebase中使用 Connect 中间件,也可以使用 Express

>

安装连接非常简单,就像firebase:npm install connect


使用Connect Session Firebase

const connect = require('connect');
const FirebaseStore = require('connect-session-firebase')(connect);
const firebase = require('firebase-admin');
const ref = firebase.initializeApp({
  credential: firebase.credential.cert('path/to/serviceAccountCredentials.json'),
  databaseURL: 'https://linkToDatabase.com'
});

connect()
  .use(connect.cookieParser())
  .use(connect.session({
    store: new FirebaseStore({
      database: ref.database()
    }),
    secret: 'secret'
  }));

答案 1 :(得分:0)

您的问题有两个方面,分别是语法和配置。

1。语法

TypeScript中首选的模块语法是esModule样式:

import ... from ...

因此,代码的首选模块语法为:

// you can rename it whatever you like:
import connectSessionFirebase from 'connect-session-firebase'

const FirebaseStore = connectSessionFirebase(session)

2。配置

事实检查:Node.js中的运行时模块系统是CommonJS样式。

require(...)

因此,当TypeScript转换为JavaScript时,您需要正确配置它以连接两个世界之间的桥梁。

以下是推荐的编译器配置,因为它最能容错。我会一一解释。

// tsconfig.json
{
  // ...
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    // ...
  }
}

"module": "commonjs"

此选项会影响代码发出。 <{1}} 必需,才能为使用CommonJS模块系统(在您的情况下为Node.js)的运行时环境发出JS代码。基本上,它告诉TS执行以下转换:

tsc

// input: import * as lodash from "lodash" // case 1 import express from "express" // case 2 import React, { Component } from "react" . // case 3 // output: var lodash = require("lodash"); var express_1 = require("express"); var react_1 = require("react"); var express = express_1.default; var React = react_1.default; var Component = react_1.Component;

此选项会影响代码发出。这是可选,但建议使用。它添加了两个运行时兼容性帮助程序"esModuleInterop": true__importDefault。他们在运行时将CommonJS模块转换为伪ESModule。

有关这些助手的详细信息,请查看此Playground Link

__importStar

此选项不影响代码发出。它仅影响TS类型检查行为,并且应与"allowSyntheticDefaultImports": true一起使用。启用此选项将允许您默认导入none-ESModule模块。

例如,著名的"esModuleInterop": true lib是仅CommonJS的模块,它没有默认导出。

express