VS Code 有'Convert namespace import to named imports'重构。据我了解,重构是在 Typescript 代码库本身中定义的,因此它不是特定于 VS Code 的。
我需要在 Jest 转换器中以编程方式对源文件运行此重构。不幸的是,我无法找到任何有关以编程方式运行 TypeScript 重构的文档。任何帮助表示赞赏。
abstract-syntax-tree automated-refactoring typescript typescript-compiler-api
当我当前运行ng build命令时,我会遇到一大堆运行时问题,而这些问题在我以 JIT 模式(Angular 6)编译时不存在。
有没有办法在编译时获得所有 AOT 问题的列表,而无需手动找出它们?
我认为至少有一套tslint规则可以强制开发人员编写符合 AOT 的代码,但我找不到。我错过了什么吗?
任何帮助表示赞赏。
更新:我正在谈论的运行时问题之一是mat-icon来自 Angular Material 的 s 不起作用。它们只是呈现为文本,如“ chevron_left ”。显然,捆绑包不包含MatIconModule. 但是,JIT 一切都按预期工作。
此外,当我阅读 AOT 文档时,我看到 AOT 编译器不支持对本地(未导出)符号的引用。但是,我确实在我的装饰器中引用了本地符号,但是我没有收到任何编译错误通知我这一点。
当使用非空断言运算符时,Typescript 编译器向结果 JS 发出非未定义和非空检查似乎是合理的。IE,:
function fun1(node: SomeType | undefined) {
fun2(node!);
}
Run Code Online (Sandbox Code Playgroud)
应该转换为:
function fun1(node) {
if (node === undefined || node === null) {
throw new Error('The non-null assertion failed!');
}
fun2(node);
}
Run Code Online (Sandbox Code Playgroud)
然而,正如文档所说的那样,它只会被转译为:
function fun1(node) {
fun2(node);
}
Run Code Online (Sandbox Code Playgroud)
为什么呢?不将检查添加到输出 JS 代码背后的原因是什么?
假设我想使用数组扩展语法复制现有数组,如下所示:
const a = [1, 2, 3, ..., n];
const b = [...a]
Run Code Online (Sandbox Code Playgroud)
的运行时复杂度是多少const b = [...a]?我似乎找不到任何相关信息。
typescript ×2
algorithm ×1
angular ×1
angular2-aot ×1
ecmascript-6 ×1
javascript ×1
null ×1
performance ×1
tslint ×1
undefined ×1