typescript - 将@types/foo 定义与另一个导出(以及其他) foo 包的模块一起使用?
问题描述
假设我有一些名为“foo”的模块。这个模块做了很多事情,它也导出了猫鼬。
// foo/index.js
const mongoose = require('mongoose');
module.exports = {
// ...lots of other things and:
mongoose,
}
我不拥有这个模块,所以我无法更改它。该foo
包不公开任何类型!
在我的个人 TypeScript 项目中,我正在从以下位置导入 mongoose foo
:
// some-file.ts
import { mongoose } from 'foo';
const carSchema = new mongoose.Schema( /* ... /* );
// etc ...
此时我的代码完成和类型检查为零。我现在如何安装@types/mongoose
并告诉 typescript{ mongoose } from 'foo'
应该使用这些类型定义?
谢谢!
解决方案
- 您可以考虑制作一个definitelyTyped 包
@types/foo
。 - 您可以
foo.d.ts
在您的 repo 中的任何位置创建一个文件(我使用src/lib/types/augments/foo.d.ts
),然后告诉它模块导出mongoose
(注意:@types/mongoose
必须是真正的依赖项,而不是开发依赖项才能工作):
import Mongoose from '@types/mongoose';
declare module 'foo' {
export const mongoose: Mongoose;
}
推荐阅读
- java - 在 Java 中使用 0xFFFF00000001LL
- excel - 在 Excel 中加速蒙特卡洛
- javascript - 如何遍历数组以构建 url?
- mysql - SQL - 仅选择每个 ID 的最新插入
- javascript - JAVASCRIPT:将json键的名称作为参数传递,并使用参数获取值
- php - 如何在 PHP 中替换文本
- postgresql - Neo-4j ETL 工具不会连接到本地 postgres 服务器。org.postgresql.util.PSQLException:不支持身份验证类型 10
- python - 如何在一个类中绘制多个精灵
- c++ - 在菱形继承问题之外使用虚拟继承来允许跨越
- javascript - 无法在 JavaScript Date() 对象中增加小时并获得预期的对象输出