首页 > 解决方案 > 如何键入将在 TypeScript 中使用命名导入导入的未知导出?

问题描述

我正在制作一个 NPM 包,它可以转换process.env和导出转换后的 env 以方便使用。

模块:

const transformedEnv = transform(process.env)

module.exports = transformedEnv

使用它(在 Babel / TS 代码库中):

import { SOME_ENV_VAR } from 'transform-env'

我的模块按预期工作,但我想提供一个 TypeScript 定义。

问题是我不知道 env 将具有哪些属性,所以我不能使用命名导出,也找不到输入“未知”导出的方法。我目前收到以下 TS2305 错误,这是完全有道理的,因为我不使用命名导出导出任何内容:

error TS2305: Module '"transform-env"' has no exported member 'SOME_ENV_VAR'.

有没有办法输入那些未知的命名导出(比如*在导出中使用 a ?)。

如果没有,有没有办法在包端绕过这个错误,而不是@ts-ignore在消费者模块端使用 a ?

标签: typescripttypescript-typings

解决方案


index.d.ts通过在我的包的文件旁边添加一个,我已经能够完全绕过我的模块的类型检查index.js,其中包含:

declare module 'transform-env'

这绝对不理想,我宁愿有真正的类型定义,但至少消费者项目可以在import { SOME_ENV_VAR } from 'transform-env'没有 TypeScript 阻塞编译的情况下使用。

仍在寻找更好的解决方案。


推荐阅读