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

问题描述 投票:0回答:2

我正在从 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
作为参数传递给配置函数,但我想在这里进行类型检查

我也尝试过

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

但出现此错误

“passportType”指的是一个值,但在这里被用作类型。

node.js typescript passport.js passport-local
2个回答
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


0
投票

对于遇到类似问题的任何人 - 如果上面的答案没有帮助,请尝试以下语法:

import passport from 'passport'

const config = (passport: typeof import("passport")) => {
© www.soinside.com 2019 - 2024. All rights reserved.