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

pass module as argument in typescript

我正在从 javascript 迁移到打字稿。

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

文件夹结构:

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

我收到这个错误

Parameter 'passport' implicitly has an 'any' type

我知道我可以将 passport:any 作为参数传递给配置函数,但我想在此处进行类型检查

我也试过了

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

但是出现这个错误

'passportType' refers to a value, but is being used as a type here.

在您的最后一个示例中,let passportType = typeof passport 正在创建一个 Javascript 变量 passportType,其值为 "object"。这是混淆,因为 Javascript 和 Typescript 都有一个具有不同含义的 typeof 运算符。

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

import passport from 'passport'

type PassportType = typeof passport

const config = (passport: PassportType) => {

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