Chalk在Deno中编译报TS2339错误但运行正常是什么原因?
问题原因
你引入的 chalk_deno@v4.1.1-deno 版本的源文件仅提供了JS实现,未附带完整的TypeScript类型声明。编译器的自动类型推导仅识别到了chalk作为函数调用的签名和Chalk构造器属性,未覆盖chalk实例上所有的颜色、样式类动态挂载属性(比如blue、bold、bgRed等),因此会出现运行时属性存在、但编译阶段TS类型校验不通过的问题。
解决方案
方案1:局部类型断言跳过校验
仅需要临时使用的场景,直接对chalk做局部类型断言即可,不会影响全局校验规则:
import chalk from "https://deno.land/x/chalk_deno@v4.1.1-deno/source/index.js"; // 单条语句断言为any跳过检查 console.log((chalk as any).blue("Hello world!"));
如果需要保留类型提示,可以手动引入官方chalk的类型定义做断言:
import chalk from "https://deno.land/x/chalk_deno@v4.1.1-deno/source/index.js"; import type Chalk from "https://cdn.skypack.dev/chalk@4.1.2/types/index.d.ts"; const styledChalk = chalk as unknown as typeof Chalk; console.log(styledChalk.blue("Hello world!")); // 有完整的类型提示
方案2:关闭全局类型校验
临时调试场景可以在项目deno.json中配置关闭类型检查,跳过所有校验:
{ "compilerOptions": { "noCheck": true } }
该配置会全局关闭TS类型校验,不推荐生产环境使用。
方案3:更换带完整类型适配的chalk版本
直接选用Deno生态中已做了完整类型适配的chalk衍生包,无需额外配置即可直接通过编译校验。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

