当前位置: 首页 > 面试题库 >

在Node.js中混合JavaScript和TypeScript

墨寂弦
2023-03-14
问题内容

在纯ES6中拥有部分Node.js时,是否可以在同一项目中混入某些Typescript模块?

例如,在TypeScript中定义了一些通过Types导入require到普通ES6文件中的类型?


问题答案:

是的,这是可能的。

结合以下TypeScript编译器选项

  1. --allowJs

明确支持混合的JavaScript和TypeScript源

  1. --outDir

由于将编译所有文件,因此有必要将结果JavaScript输出到其他目录中,否则输入 .js文件将被覆盖 1

  1. --checkJs

这是完全可选的。如果指定,则编译器将对JavaScript文件进行类型检查,就像在TypeScript文件中一样报告错误,否则它将容忍不一致之处。

至于使用JavaScript文件中TypeScript文件中声明的类型,确实可以做到。

TypeScript实际上在诸如Visual Studio Code之类的工具中为所有JavaScript智能感知提供了动力。

类型可以放在JSDoc 2 注释中。这些注释可以引用从TypeScript(.ts/ .tsx/
.d.ts)文件导入的类型。像Visual Studio Code这样的IDE将在这些注释中提供语法突出显示和自动完成功能。

但是有一个警告。因为JavaScript中没有类型的清单语法,所以不能单独导入它们,而必须将其附加到导入的
上。这可以通过TypeScript的声明合并来最方便地实现,如下所示。

例:

a.ts

export default createThing;

function createThing(...args): createThing.Thing  {...}

namespace createThing {
  export interface Thing {...}
}

b.js

import createThing from './a';

/**
 * @param {createThing.Thing} thing
 */
export function takesThing(thing) {}

笔记:

*--outDir 如果另外指定该--noEmit标志,则不需要 *1
:当使用诸如SystemJS(带有plugin-
typescript)或Webpack(带有awesome-
typescript
-loader或ts-loader)之类的工具托管TypeScript编译器时,您可以执行此操作。如果您使用TS Node,则同样适用。

2 :尽管它们称为JSDoc注释,但它们是在TypeScript类型系统 而不是
JSDoc系统的上下文中解释的。诸如TypeScript和Google的Closure
Compiler之类的语言和工具可以有效地劫持JSDoc语法以达到其自身目的,从而为其构造赋予潜在的冲突含义。这通常不是问题,但是值得一提,因为很难确定这些注释的适用性和正确性以及它们引用或声明的类型的兼容性。

备注:

尽管此问题和答案都是关于导入类型以在JavaScript文件中使用的,但由于编译器将从表达式的值中推断类型,因此通常是不必要的。

还值得一提的是,如果您发现自己需要编写很多JSDoc样式类型注释,那么将文件转换为TypeScript几乎可以肯定是更好的选择,因为在JSDoc中表达类型的语法很笨拙。由于有了该--allowJs选项,如上所述,您可以逐个文件地执行此操作。



 类似资料:
  • 问题内容: 我对如何混合剃须刀和js感到很困惑。这是我坚持的当前功能: 如果我可以用声明c#代码,而其他所有内容都是JS代码,这就是我的追求: 实现此目的的最佳方法是什么? 问题答案: 用途:

  • 问题内容: 嗨,我有这段代码将从数据库中提取客户端名称和地址。它会在while循环中将下拉菜单()中的每个条目的客户端名称呼出。然后,我有了一个Javascript,当您在下拉列表中选择一个选项时,该Javascript会更改名为“ content”的DIV的innerHTML-基于从数据库中提取的内容,这是唯一的。-这是我无法使用的地方。.下面是我的代码,非常感谢您的帮助。 问题答案: 在执行J

  • 当以下转换在将RDD写入文件之前执行时,它们之间有什么区别? 聚结(1,洗牌=true) 合并(1,洗牌=假) 代码示例: 它与collect()相比如何?我完全知道Spark save方法将以HDFS风格的结构存储它,但我更感兴趣的是collect()和shuffled/non shuffled coalesce()的数据分区方面。

  • 问题内容: 是否有人将Hamcrest与TestNG集成在一起,以便其匹配器可以轻松地用于TestNG断言中? 问题答案: 简而言之,要回答您的问题:您不需要将TestNG与Hamcrest集成。只需直接调用哪个抛出。 背景 我通过Google找到了您的问题,想知道完全一样的问题。在进一步谷歌搜索之后,我没有找到满意的答案,因此我阅读了JUnit与Hamcrest集成的源代码。 对于JUnit,通

  • 问题内容: 我一直在用Python开发一个库,我想做一些性能改进。 是否可以在Python中编写一些代码并在Go中编写一些代码,并在它们之间传递数据?如果可能的话,是否有任何有关此操作的示例? 像这样: 问题答案: 你需要一个 胶 之间,例如编程语言或通信通过网络。如果您将https://docs.python.org/2/extending/extending.html与http://golan

  • 问题内容: 是否可以将HQL和Criteria API混合使用? 我有一个包含HQL中的where条件的,并且已经构建并从其他地方获取了。我想知道是否可以将where条件添加到中。where条件可以是多个条件“与-或-” /“或-或”在一起。 我可以在不解析where条件的情况下执行此操作吗? 问题答案: 您可以使用Restriction.sqlRestriction(字符串sql)。