首页 > 解决方案 > 将@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'应该使用这些类型定义?

谢谢!

标签: typescript

解决方案


  1. 您可以考虑制作一个definitelyTyped 包@types/foo
  2. 您可以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;
}

推荐阅读