库内部测试与外部导入时类型表现不一致的原因咨询
嘿,我猜你是碰到了库开发里挺闹心的一个小问题——自己在库内部写的测试代码跑起来顺得不行,类型检查一点毛病都没有,但把库拿到外部项目导入使用时,就出现类型相关的报错或者类型推断异常了对吧?结合你给出的测试代码,我给你梳理几个最可能的原因,你可以挨个排查下:
TypeScript配置不匹配或未正确生成类型文件
你内部测试用的是库根目录的tsconfig.json,而外部项目的tsconfig可能有不同的规则(比如strict模式开关、moduleResolution策略、目标编译版本不一样),这很容易导致类型推断结果不一致。另外重中之重:你的库的tsconfig里有没有开启declaration: true?如果没开的话,编译后不会生成.d.ts类型定义文件,外部项目导入时根本拿不到正确的类型信息,自然会出问题。package.json的入口配置错误
你内部测试用的是相对路径导入(比如../../src/index),但外部项目是通过包名导入的。这时候得确保你package.json里的main(指向编译后的JS入口)和types(指向对应的类型定义入口)字段配置完全正确。比如types字段如果没指向编译后的.d.ts入口文件,外部导入时类型就会失效。类型导出不完整或内部类型未对外暴露
看你测试里的代码,内部能直接实例化InMemoryStorage并传给database,这是因为内部能访问到所有未导出的内部类型,但外部项目不行。如果database函数的返回类型或者参数类型依赖了某些没从库入口导出的类型,外部使用时就会出现类型异常。另外,如果你希望外部也能使用InMemoryStorage,得把它从库的入口文件显式导出才行;如果只是内部测试用,那要确保database的类型定义不依赖外部无法访问的内部类型细节。
可以先从这几个方向入手排查,比如先检查tsconfig的declaration配置,再核对package.json的main和types字段,最后确认所有需要外部访问的类型都已经正确导出啦~
内容来源于stack exchange

