在打字稿中将模块作为参数传递

时间:2021-03-20 05:33:43

标签: node.js typescript passport.js passport-local

我正在从 javascript 迁移到 typescript。

为了保持我的代码干净,我将代码分散在单独的文件中,但我在打字稿中遇到了问题

文件夹结构:

App
 |- config
 |  |- passport.js
 |- server.js

这样做在 javascript 中完全有效:

app.js(文件)

const passport = require('passport')
const config = require('./config/passport')(passport)
//all other express code

config.js(文件)

const config = (passport)=>{
//authentication login
}
module.exports = config

但是当我尝试在打字稿中做类似的事情时

app.ts(文件)

import express from 'express'
import config from './config/passport'
//all other express code

config.ts(文件)

const config = (passport)=>{
//authentication login
}
export default config

我收到此错误

<块引用>

参数“passport”隐式具有“any”类型

我知道我可以将 passport:any 作为参数传递给 config 函数,但我想在这里进行类型检查

我也试过

import passport from 'passport'
let passportType = typeof passport
config(passport : passportType) 

但得到这个错误

<块引用>

'passportType' 指的是一个值,但在此处被用作类型。

1 个答案:

答案 0 :(得分:0)

在上一个示例中,let passportType = typeof passport 正在创建一个值为 passportType 的 Javascript 变量 "object"。这很混乱,因为 Javascript 和 Typescript 都有一个 typeof 运算符,含义不同。

为了创建 Typescript 类型,您需要使用关键字 type 而不是 let

import passport from 'passport'

type PassportType = typeof passport

const config = (passport: PassportType) => {

将整个 passport 模块传递给函数而不是仅使用 passport 文件中导入的 config 有点奇怪。