【问题标题】:pass module as argument in typescript在打字稿中将模块作为参数传递
【发布时间】:2021-06-17 11:23:12
【问题描述】:

我正在从 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


【解决方案1】:

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

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

import passport from 'passport'

type PassportType = typeof passport

const config = (passport: PassportType) => {

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2021-05-24
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    相关资源
    最近更新 更多