javascript - TypeScript 引用非静态方法
问题描述
我需要从根目录加载一个模块,所以我习惯require.main.require()
这样做。由于 import 无法访问根目录,所以我需要使用 require。但是,这是引用错误的connect()
方法:
export class MongoClient extends EventEmitter {
connect(callback: MongoCallback<MongoClient>): void;
}
我需要的是它引用静态方法:
export class MongoClient extends EventEmitter {
static connect(uri: string, options?: MongoClientOptions): Promise<MongoClient>;
}
代码在使用 node 编译和执行时运行良好,只是它在编辑器中显示错误。这就是我正在做的事情:
declare type MongoClient = import('mongodb').MongoClient
const mongo = require.main && require.main.require('mongodb')
const MongoClient: MongoClient = mongo.MongoClient
async function connect() {
let url = 'mongodb://....'
await MongoClient.connect(url, { useNewUrlParser: true })
}
预期 0-1 个参数,但得到 2 个。
解决方案
问题是打字稿期望connect
在变量上调用成员函数,但类型声明指定connect
为静态。
由于您必须通过 require.main 导入,这会导致实例而不是静态类,因此最简单的解决方法是将 connect 重新声明为实例成员。
import { MongoClient, MongoClientOptions} from "mongodb";
declare class MyMongoClient extends MongoClient {
connect(uri: string, options?: MongoClientOptions): Promise<MongoClient>;
connect(): Promise<MongoClient>;
}
const mongo = require.main && require.main.require('mongodb')
const mongoClient = mongo.MongoClient as MyMongoClient
async function connect() {
let url = 'mongodb://....'
await mongoClient.connect(url, { useNewUrlParser: true })
}
由于 declare 关键字,实际模块在编译后不会被拉入。
推荐阅读
- swift - MTKView 委托不起作用
- windows - C930 网络摄像头不显示 h264 流
- c# - 如何将sdf转换为excel?
- javascript - NGRX 操作已调度,但效果未触发
- python - KeyError 试图绘制一个过滤的数据框
- r - 如何按行对具有相同名称的所有列的所有观察结果求和?
- android - 致命异常:java.lang.NoClassDefFoundError com.google.android.gms.internal.firebase-perf.zzw
- python - Scrapy - 抓取子元素 - 抓取 CSS 选择器的错误部分
- excel - VBA计算匹配颜色和特定文本的单元格
- python - Python-为什么我的列表索引超出范围错误?