1

以下代码来自 Deno Chalk 库的README。Deno/Typescript 不会让它通过:

import chalk from "https://deno.land/x/chalk_deno@v4.1.1-deno/source/index.js";
// Run this in debugger and it's fine but it won't compile:
console.log(chalk.blue("Hello world!"));
console.log(eval("typeof chalk.blue"), "At runtime it's fine!");

输出:

错误:TS2339 [错误]:类型'{(...arguments_:any [])上不存在属性'blue':字符串;粉笔:粉笔类型;}'。console.log(chalk.blue("Hello world!"));

修补:

注释掉第 3 行,它运行良好!所以chalk.blue在运行时可用但对编译器不可见?

函数在运行时没问题!

4

2 回答 2

0

我们知道 chalk 是 node 原生的(因为它主要是为 nodejs 构建的),它在 deno 上的移植会有一些错误和缺点,因为它们不像它们的父包那样成熟,更不用说 deno 本身是相当新的并且需要是时候拥有一个强大的开发人员友好环境了。

但是在您的情况下,该chalk模块可以很容易地被名为colors. 链接:- https://deno.land/std@0.123.0/fmt/colors.ts

该链接的格式https://deno.land/std@version/fmt/colors.ts应将版本替换为您要使用的版本,在撰写本文时最新版本为 0.123.0

用法:

// importing colors library from denoland

import {red,blue,bold} from "https://deno.land/std@0.123.0/fmt/colors.ts"

console.log(red("This text will be printed in red");
console.log(blue("This text will be printed in blue");

// merging two properties

console.log(bold(red("This text will be red and bold"));

如您所见,用法与 chalk 模块非常相似,对于完整的 API 文档,您可以查看denoland此处提供的 README

于 2022-02-01T07:55:29.110 回答
0

第三方代码具有不同质量的类型库是很常见的。

您要导入的特定模块是一个 JavaScript 文件(不包括类型信息)。但是,在https://deno.land/x/chalk_deno@v4.1.1-deno/index.d.ts有一个类型声明文件。

Deno 有一种针对此类情况的机制,它允许您为要导入的模块提供编译器提示:@deno-types指令。在此处阅读:https ://deno.land/manual@v1.14.3/typescript/types#providing-types-when-importing

在导入语句之前,您可以像这样使用它:

// @deno-types="https://deno.land/x/chalk_deno@v4.1.1-deno/index.d.ts"
import chalk from "https://deno.land/x/chalk_deno@v4.1.1-deno/source/index.js";

一些背景知识:目前,您会在 deno.land/x 找到相当多的模块,它们只是直接从 npm 包中复制而来。其中很多不包含类型,而且很多甚至都不是正确的 ESM 格式(使用没有导入映射的裸说明符等),这使得它们与 Deno 完全不兼容。这种可变的质量只是使用第三方软件的本质(无论哪个生态系统),对作为消费者的你来说是不幸的,因为它增加了你审计依赖项的工作。

于 2021-10-12T12:02:00.307 回答