【问题标题】:How to type unknown exports that will be imported with named imports in TypeScript?如何键入将在 TypeScript 中使用命名导入导入的未知导出?
【发布时间】:2019-08-25 13:10:33
【问题描述】:

我正在制作一个 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'.

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

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

【问题讨论】:

    标签: typescript typescript-typings


    【解决方案1】:

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

    declare module 'transform-env'
    

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

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

    【讨论】:

      【解决方案2】:

      你可以使用

      import * as anyName from 'transform-env'
      
      

      【讨论】:

      • 是的,我可以使用*或者默认导出(import env from 'transform-env'可以),但是我想提供一个更方便的接口直接导入属性,所以用户没有稍后使用const { SOME_ENV_VAR } = env对其进行解构@
      猜你喜欢
      • 1970-01-01
      • 2019-08-11
      • 2020-06-25
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 2019-06-16
      相关资源
      最近更新 更多