问题标签 [typescript-compiler-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
421 浏览

typescript - Typescript 编译器即服务:如何测试一种类型是否可分配给另一种类型?

我正在制作一个命令行 nodejs 工具,它使用 Typescript 语言服务自动重命名 Typescript 文件中的符号。

您告诉工具:将此类型的所有符号重命名为此符号。就像 resharper 一样,它也会重命名局部变量、属性等。由于它允许一次重命名多个符号,您还可以交换两个符号名称,而无需中间的临时唯一名称(例如,将 Foo 重命名为 Bar,反之亦然)。

我必须公开语言服务中的私有函数 getSymbolInfoAtPosition 才能使其工作,这样我才能获得 PullSymbol 信息

目前,它仅通过在 PullSymbol 上调用 getNameAndTypeName 来检测确切的名称+类型匹配,但我想执行结构上兼容的匹配。

在 C# 中,这很容易,因为 Type 具有 IsAssignableFrom 方法。

有谁知道如何使用 Typescript 编译器即服务来检测一个 PullSymbol 在结构上是否与另一个 PullSymbol 兼容?

非常感谢,彼得 Verswyvelen

0 投票
1 回答
2488 浏览

typescript - 您如何使用 Typescript 编译器的 Typechecker 来获取声明的(别名)类型,而不是解析的类型?

我意识到这有点晦涩难懂,但也许其他人已经遇到过这个问题或者很了解 Typescript 编译器。我正在使用 Typescript 的编译器 API 处理 Typescript 文件,基于以下示例:https ://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API

想象一下,我在 Typescript 中有一个这样的声明函数:

在上面链接的示例中,您可以看到定义了这样的方法来提取有关符号的信息:

当您checker.typeToString(checker.getTypeOfSymbolAtLocation(symbol, symbol.valueDeclaration)date: DateString符号上运行时,它不是返回DateString,而是返回string。换句话说,你得到的不是声明的类型别名,而是完全解析的类型。就我而言,我想知道该date字段的类型是DateString. 是否有一种简单的方法来查找参数的声明类型而不是其解析类型?

0 投票
1 回答
863 浏览

typescript - 在不使用 ts.createProgram 的情况下创建 Typescript TypeChecker?

我正在使用 typescript 库进行一些反思。首先,我使用ts.createSourceFile和传递存储在内存中的文件。这非常有效,我可以轻松地通过节点来匹配绑定语法(在 html 文件中)与 ViewModels(打字稿),以确保访问良好。

我的问题是我现在想对我拥有的 ts.SourceFile 对象进行一些基本的类型检查。到目前为止,我只能将TypeChecker接口跟踪回Program类。不幸的是,ts.createProgram需要文件的路径,而我想传递SourceFile我已经拥有的集合。

有没有办法使用ts.SourceFile我已经拥有的对象进行类型检查?我真正需要知道的是右侧是否可分配给左侧,我在左侧都有类型节点。

0 投票
1 回答
200 浏览

typescript - `ImportDeclaration.moduleSpecifier` 是否应该始终为 StringLiterial?

我找不到moduleSpecifier不是StringLiteral

0 投票
2 回答
2559 浏览

angular - Angular2:生成 metadata.json 和 ngsummary.json

亲爱的 Angular 2 开发人员,

我正在努力寻找关于 angular 2 编译器 (ngc) 的体面文档。

我想做的事:我有一个文件夹,其中包含一个 Angular 2 日志库,其入口点是“logging.module.ts”。到目前为止,我已经通过 tsconfig 文件对其进行了编译,并且运行良好。

现在,我想切换到角度编译器。然而,当我运行 ngc. 仅生成 *.ngfactory.ts 和 *.ngsummary.json 文件。

我看不到任何 .js .d.ts 或 .metadata.json 文件。(如果我理解正确,ngc 被设计为打字稿编译器的“替代品”)。

任何提示我可能做错了什么?

谢谢你的帮助。

0 投票
1 回答
184 浏览

typescript - 分别编译多个打字稿文件

我有 2 个打字稿文件 -

a.ts:

b.ts:

如果我通过将这两个文件添加到 tsconfig 中的 include 选项(或通过在命令行中同时提供这两个文件)来编译这两个文件,那么在 b.ts 中未定义某些文件不会出现错误。如何分别编译这两个文件?他们首先共享命名空间甚至没有意义。

0 投票
1 回答
748 浏览

typescript - 用 TypeScript 编译器 API 转换器替换引号

我有一个 TypeScript 代码生成场景,我在其中构造了一个 AST,然后将其打印并保存到一个文件中。默认情况下,打印的字符串文字用双引号括起来,我想要一个带有单引号的选项。正如这里提到的,我应该能够遍历树并替换字符串文字,但我不确定如何。

使用 TS 工厂函数创建字符串文字ts.createLiteral(stringLiteral.text)将始终使用双引号。有什么方法可以直接访问和更改发出的文本?

0 投票
1 回答
1080 浏览

typescript - 使用 TypeScript 编译器 API 格式化打印代码

我有一个 TypeScript 代码生成场景,我在其中构造了一个 AST,然后将其打印并保存到一个文件中。例如,打印的类声明元素聚集在一起。怎样才能实现在新方法/构造函数声明之后插入换行符的漂亮打印类型,并且也许可以在新行中堆叠扩展方法?

任何现有的 API 就足够了,或者有没有办法在声明后手动插入一些尾随琐事?

0 投票
1 回答
914 浏览

typescript - 在 TypeScript 编译器 API 中插入任意文本并修改 NodeArrays

其实我有两个问题:

  1. 如何从字符串创建 AST 片段?
  2. 如何添加导入?

PS我尝试了各种方法createSourceFilets.createImportDeclaration但它们都导致了这个或那个错误:[

0 投票
1 回答
927 浏览

typescript - 如何知道 TypeScript 编译器中符号的声明类型?

我正在尝试按照Compiler API构建代码分析工具。

现在下面的应用程序可以打印出p, Person, age, walk.

但是如何知道Person是接口,walk是功能等呢?谢谢

// 应用程序.ts

// api.d.ts

// 用户应用程序.ts