美文网首页
5.6 常见问题

5.6 常见问题

作者: 9e8aeff1c70c | 来源:发表于2021-05-29 06:58 被阅读0次

    我可以使用其他typescript吗?

    也许吧。这是最好的答案。由于很多原因,Deno选择使用完全限定的模块说明符。这在一定程度上是因为它把TypeScript当作一流的语言。此外,Deno使用显式的模块解析,没有使用魔术。这实际上与浏览器本身的工作方式相同,尽管它们显然不直接支持TypeScript。如果TypeScript模块使用的导入没有考虑到这些设计决策,那么它们可能无法在Deno下工作。

    此外,在Deno的最新版本(从1.5开始)中,我们已经开始在某些场景中使用Rust库来执行TypeScript到JavaScript的转换。正因为如此,在TypeScript中有某些情况需要类型信息,因此在Deno下不支持这些信息。如果您将tsc设置为独立使用,则要使用的设置为“solatedModules”,并将其设置为true,以帮助确保您的代码可以被Deno正确处理。

    处理扩展和缺乏“神奇”解析的方法之一是使用导入maps],这将允许您指定裸说明符的“包”,然后Deno可以解析和加载这些“包”。

    Deno支持哪些版本的TypeScript?

    Deno总是用特定版本的TypeScript一起构建的。要找出这是什么,请在命令行中键入以下内容:

    > deno --version
    

    将打印TypeScript(以及Deno和V8版本)。Deno试图与TypeScript的一般版本保持同步,在Deno的下一个补丁或次要版本中提供它们。

    Deno使用的TypeScript版本有一个突破性的变化,你为什么要破坏我的程序?

    我们不认为行为上的改变或TypeScript版本中的破坏性更改是对Deno的破坏性更改。TypeScript是一种普遍成熟的语言,对Tyescript的突破性更改几乎总是使代码更健全的“好事”,我们最好都保持代码的完整性。如果TypeScript的版本有阻止更改,并且在问题得到解决之前不适合使用较旧版本的Deno,那么您应该可以使用--no-check跳过所有类型检查。

    此外,您还可以使用@ts-Ignore命令对您控制的代码中的特定错误进行忽略。您还可以替换整个依赖项,如果依赖项的依赖项未得到维护,或者在等待更新时有某种想要绕过的破坏性更改,则可以使用导入maps,]来替换整个依赖项。

    为什么你强迫我使用隔离模块,为什么我不能使用带Deno的常量枚举,为什么我需要做导出类型?

    从Deno 1.5开始,我们默认将solatedModules设置为‘true`,在Deno 1.6中,我们删除了通过配置文件将其设置回’false‘的选项。solatedModules选项强制TypeScript编译器检查并发出TypeScript,就好像每个模块都是独立的一样。Typescript目前在语言中有几个非类型的定向发射。虽然不允许将文字定向发射到语言中是TypeScript的设计目标,但不管怎样,它还是发生了。这意味着TypeScript编译器需要了解代码中的可擦除类型以确定要发出什么,当您试图在JavaScript之上创建一个完全可擦除的类型系统时,这就成了一个问题。

    当人们开始在没有tsc的情况下转写打字稿时,这些类型定向发射就成了一个问题,因为像巴别塔这样的人只是试图擦除类型,而不需要了解类型来指导发射。在Deno的内部,我们已经开始使用基于Rust的发射器,它允许我们有选择地跳过类型检查,并为类似于‘deno bundle`的东西生成包。像所有的代码转换程序一样,它并不关心类型,它只是试图删除它们。这意味着在某些情况下,我们不支持那些类型定向发射。

    因此,我们没有试图让每个用户都理解我们何时以及如何支持类型定向发射,而是决定通过强制将solatedModules*选项设置为‘true`来禁用它们的使用。这意味着,即使我们使用TypeScript编译器来生成代码,它也将遵循与基于铁锈的发射器相同的“规则”。

    这意味着某些语言功能不受支持。这些功能包括:

    • 重新导出类型是不明确的,需要知道源模块是导出运行时代码还是只导出类型信息。因此,建议您只使用类型导入和导出,使用导入类型导出类型。这将有助于确保在发出代码时,所有类型都被擦除。
    • 不支持const枚举const枚举需要类型信息来指示发射,因为const枚举会写出为硬编码值。特别是当导出`const枚举时,它们只是一个类型系统构造。
    • export=和*import=是我们不支持的旧版打字脚本语法。
    • 仅支持声明命名空间。运行时名称空间是不支持的旧版类型脚本语法。

    为什么不支持语言服务插件或转换器插件?

    虽然tsc支持语言服务插件,但Deno不支持。Deno并不总是使用内置的TypeScript编译器来做它所做的事情,而且添加对语言服务插件的支持的复杂性是不可行的。TypeScript不支持发行插件,但有几个社区项目将发射器插件“黑”成了TypeScript。首先,我们不想支持TypeScript不支持的东西,而且我们并不总是为emit使用tyescript编译器,这意味着我们需要确保在所有模式下都支持它,而另一个发行是用Rust编写的,这意味着任何用于tyescript的发行插件都不能用于Rust发射器。

    Deno中的TypeScript并不是一个完全灵活的TypeScript编译器。它的主要目的是确保TypeScript和JavaScript可以在Deno下运行。通过运行时APIDeno.emit()执行TypeScript和JavaScript发出的次要功能旨在简单明了,并支持一组特定的用例。

    相关文章

      网友评论

          本文标题:5.6 常见问题

          本文链接:https://www.haomeiwen.com/subject/iwsurltx.html