【问题标题】:Deno - Importing TypeScript into a JS fileDeno - 将 TypeScript 导入 JS 文件
【发布时间】:2020-05-19 13:35:24
【问题描述】:

在 Deno 中,要导入 TypeScript 模块,您自己的代码文件是否必须是 TypeScript?还是 Deno 在导入模块之前自动将 TypeScript 转换为 javascript?

我希望我的所有代码文件都是 EcmaScript 模块(js 或 mjs,但不是 ts)。

与现在的其他人不同,我想避免在自己的代码中使用 TypeScript。我不喜欢静态类型的死板,Typescript 不是 EcmaScript 标准的一部分。仅 EcmaScript 就拥有我管理大型项目所需的一切。对我来说,TypeScript 是一种过时的技术,自 ES6 模块出现以来就不再需要它了。 TypeScript 解决的问题类型是我没有的问题。

但是,很明显,Deno 中可用的许多 3rd 方模块将使用 TypeScript 编写。是否可以以在导入之前转换为 JavaScript 的方式导入这些模块,以便我可以保留自己的代码纯粹是 EcmaScript?

【问题讨论】:

  • Lonnie,如果您可以编辑您的问题,删除个人想法并使其符合社区准则,或者至少更友好,那就太好了。
  • @EvandroPomatti 避免使用 TypeScript 有什么不友好的?我无权说明我的问题的原因吗? TypeScript 在政治上是否正确,尽可能避免使用它是不友好的?
  • 您不喜欢 Typescript 的所有原因,包括它的“僵化”和“过时的技术”,都与您的问题无关。提出它们的唯一原因是隐含的争论。指出这一点与“政治正确”无关。

标签: deno


【解决方案1】:

您可以使用 JavaScript 编写自己的代码。

假设您拥有或正在使用 TypeScript 文件/模块numbers.ts

export function isEven(n: number): boolean {
    if (n % 2 != 0) {
        return false
    }
    return true;
}

您可以使用app.js JavaScript 脚本导入并运行它:

import { isEven } from "./module.ts";

const one = isEven(1)
const two = isEven(2)

console.log(one)
console.log(two)

Deno 在内部将 TypeScript 转换为 JavaScript。使用标准或第 3 方库时,该过程是相同的。 Deno 项目的人们更进一步,将其添加为目标:

https://deno.land/manual/introduction

浏览器兼容:编写的 Deno 程序的子集 完全在 JavaScript 中并且不使用全局 Deno 命名空间(或 功能测试),也应该能够在现代网络中运行 浏览器无需更改。

名称解析必须是完全限定的。在这个使用 TypeScript 的专用页面中有更多关于引用类型定义的内容:

https://deno.land/manual/getting_started/typescript

Deno 支持 JavaScript 和 TypeScript 作为一流的语言 在运行时。这意味着它需要完全限定的模块名称, 包括扩展(或提供正确媒体类型的服务器)

例子:

import { config } from "https://deno.land/x/dotenv/mod.ts";

按照我上面的示例,您可以使用bundle 命令生成包含所有依赖项的单个 JavaScript 文件。捆绑它会占用我的 app.jsmodule.ts 文件并创建一个新文件 app.bundle.js 这是 JavaScript。

https://deno.land/manual/tools/bundler

$ deno bundle app.js app.bundle.js
Bundling file:///home/pomatti/projects/deno-sandbox/app.js
Emitting bundle to "app.bundle.js"
3111 bytes emmited.
$ deno run app.bundle.js
false
true

它甚至可以在浏览器中加载:

捆绑包也可以在网络浏览器中加载。捆绑包是一个 自包含 ES 模块,因此 type 的属性必须设置为 “模块”。例如:

<script type="module" src="website.bundle.js"></script>

至于 ECMAScript 模块,我想指出 TypeScript 也实现了它。

https://github.com/microsoft/TypeScript/issues/2242

https://www.staging-typescript.org/docs/handbook/modules.html

从 ECMAScript 2015 开始,JavaScript 有了模块的概念。 TypeScript 也有这个概念。

现在,“静态类型”的讨论超出了本论坛的范围,所以我不会在这里触及它,但我相信我涵盖了其他所有内容。

【讨论】:

  • 第二行中的numbers.ts 应该是module.ts 吗?如果是这样,您可以全程使用numbers.ts 吗?我是服务器端 JS 的新手,仍在尝试了解模块的所有方法。有了numbers.ts,我立刻就知道好吧,那将是我正在使用的任何.ts 文件。在一个部分关于模块的问题中,module.ts 听起来它具有特殊状态:约定或自动- 生成。如果它我们应该这样称呼它,请注意。但如果不是,我认为numbers.ts 作为示例文件名对我的帮助更大。总体来说答案很棒,谢谢!
猜你喜欢
  • 2019-06-16
  • 1970-01-01
  • 2017-05-04
  • 2018-07-17
  • 2016-05-10
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多