Deno 1.41.0使用import maps时类型无法正常工作的原因?
Deno 1.41.0中使用Import Maps别名导入Stripe时类型失效问题
在Deno 1.41.0版本里,直接导入Stripe的npm包时类型提示正常:
import Stripe from 'npm:stripe@14.12.0'
但通过import maps定义的$stripe别名导入时,即便加上// @deno-types="npm:@types/stripe"注释,类型提示也完全失效,相关代码如下:
第一种写法:
import Stripe from '$stripe'
第二种加类型注释的写法:
// @deno-types="npm:@types/stripe" import Stripe from '$stripe'
当前deno.json中的import map配置:
{ "imports": { "$stripe": "npm:stripe@14.12.0" } }
VS Code的settings.json配置:
{ "deno.enablePaths": [ "./" ], "deno.enable": true, "deno.unstable": true, "deno.config": "./deno.json", "deno.lint": true }
问题原因分析
- Deno版本类型解析缺陷:Deno 1.41.0对import maps别名的类型解析逻辑和直接导入npm包不一致。直接导入时,Deno能自动识别Stripe包自带的类型定义(新版本Stripe库本身包含类型,无需额外@types包),但别名导入时,类型解析链路未正确触发,无法读取类型文件。
- @deno-types注释失效:使用别名导入时,Deno可能绕过了导入语句上的@deno-types注释处理逻辑,导致手动指定的类型无法被关联。
- import maps配置未显式关联类型:默认的import maps仅映射了包的默认入口,未指定类型文件路径,Deno无法自动推断别名对应的类型来源。
解决方法
- 在import maps中显式指定类型:修改deno.json的imports配置,为别名同时指定默认入口和类型:
{ "imports": { "$stripe": { "default": "npm:stripe@14.12.0", "types": "npm:@types/stripe" } } }
(注:如果Stripe包自带类型,也可以直接指向包内的类型文件路径,比如npm:stripe@14.12.0/index.d.ts)
升级Deno版本:该问题大概率是Deno的版本bug,升级到最新稳定版后,import maps的类型解析逻辑可能已修复。
临时绕过别名:问题解决前,暂时直接使用
npm:stripe@14.12.0导入,保证类型提示正常工作。
内容的提问来源于stack exchange,提问作者Oleg
相关产品推荐
相关产品推荐

