当有一个 node 的部分时.在普通的ES6中,是否可以在同一个项目中混合使用一些Typescript模块?

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

推荐答案

是的,这是可能的.

下面的选项组合了TypeScript编译器

  1. --allowJs

    显式支持混合JavaScript和类型 script source

  2. 一百

由于所有文件都将被传输,因此有必要将生成的JavaScript输出到另一个目录中,否则会影响输入

  1. --checkJs

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

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

TypeScript实际上支持Visual Studio代码等工具中的所有JavaScript intellisense.

类型可以放在JSDoc2注释中.这些注释可以引用从TypeScript(.ts/.tsx/.d.ts)文件导入的类型.像VisualStudio代码这样的IDE将在这些注释中提供语法高亮显示和自动完成.

但是有一个警告.因为JavaScript中没有类型的 list 语法,所以它们不能单独导入,但必须附加到导入的value.这可以通过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) {}

Notes:

如果另外指定--noEmit标志,则不需要1:--outDir.当使用诸如SystemJS(带plugin-typescript)或Webpack(带ts-loader)这样的工具来托管TypeScript transpiler时,您可以这样做.如果使用TS Node,同样适用.

2:虽然称为JSDoc条注释,但它们是在TypeScript类型系统的上下文中解释的,103是在JSDoc系统中解释的.像TypeScript和Google的Closure Compiler这样的语言和工具,为了自己的目的,有效地劫持了JSDoc语法,从而为其 struct 赋予了潜在的冲突含义.这通常不是问题,但值得知道,因为很难确定这些注释的适用性和正确性,以及它们引用或声明的类型的兼容性.

Remarks:

尽管这个问题和答案都是关于导入JavaScript文件中使用的类型的,但这通常是不必要的,因为编译器会根据表达式的值推断类型.

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

Node.js相关问答推荐

如何在Node js中从MongoDB获取特定数据,使用GET方法?

如何在Node.js 中设置图表js的背景色

NPM:一般的npm二进制依赖可以静态构建吗?

类扩展值[object object]不是构造函数或null

如果我加入另一个公会且我的​​机器人已在其中,欢迎消息发送错误

Axios TypeError:将循环 struct 转换为 JSON

Google App Engine 突然不允许我部署我的 node.js 应用程序

如何从哪个应用程序用户中找到在 Firebase 身份验证中进行身份验证的用户

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

在将用作 nodejs/expressjs 中的中间件的函数中使用 keycloak.protect()

使用 .pipe(res) 向客户端发送音频不允许您搜索?

NestJS TypeORM 可选查询不起作用

如何使用 superagent/supertest 链接 http 调用?

适用于 Windows 的 NVM 无法正常工作?

如何使用 mocha.js 模拟用于单元测试的依赖类?

如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js 应用程序?

在 Node.js 与 Cron 作业(job)中设置间隔?

Sequelize 基于关联的查找

Fluxible 中的脱水和再水合代表什么?

将 expressjs 绑定到特定的 IP 地址