当有一个 node 的部分时.在普通的ES6中,是否可以在同一个项目中混合使用一些Typescript模块?
例如,在TypeScript中定义了一些类型,这些类型通过require
导入到普通ES6文件中?
当有一个 node 的部分时.在普通的ES6中,是否可以在同一个项目中混合使用一些Typescript模块?
例如,在TypeScript中定义了一些类型,这些类型通过require
导入到普通ES6文件中?
是的,这是可能的.
下面的选项组合了TypeScript编译器
--allowJs
显式支持混合JavaScript和类型 script source
一百
由于所有文件都将被传输,因此有必要将生成的JavaScript输出到另一个目录中,否则会影响输入
--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
选项,您可以按上述方式逐个文件执行此操作.