【发布时间】:2017-04-25 15:39:20
【问题描述】:
我的情况:
- 我有一个包含 API 响应类型信息的库。 (例如:获取用户对象会返回一个带有
{ id: number, name: string }的对象)。 - 我想验证我是否正确编写了我的类型,并在 API 更改时发现任何问题。
到目前为止我做了什么:
我有一个程序可以生成一些 TypeScript 代码,基本上是从 api 中提取数据,然后查看 TypeScript 编译器是否同意它与接口匹配。
最后的结果是这样的:
import { User } from './user';
function verify<T>(data: T) {}
verify<User>({ id: 123, name: 'Joe' });
verify<User>({ id: 123, name: 17 }); // <-- obviously, this should give an error
生成此代码已完成,但是我现在需要让编译器对其进行类型检查。我已经在 typescript 编译器 API 中研究了一段时间并且一直卡住,因为所有似乎做我需要的功能都采用文件名(即:磁盘上的路径)而不是一串代码。我知道由于对其他文件的引用,需要有一个与代码关联的路径,但我找不到任何方法来传递它。
我想避免将这些文件写入磁盘,因为
a) 这似乎有点傻,因为它只是从磁盘读取然后
b) 它可能会在源文件中变得非常混乱,或者我必须将它放在一个单独的文件夹中,然后还要重写所有导入语句。
我的问题的 TL;DR 是:
有没有办法对 TypeScript 代码字符串进行类型检查?
【问题讨论】:
-
我相信你必须连接到TypeScript Language Service。
-
具体来说,“对于不想选择增量解析的用户,请使用
ts.ScriptSnapshot.fromString()” -
@SeanVieira 好的,但是然后呢?我有一张快照……然后?
-
@MikeMcCaughan 该页面有很多高级信息,但没有关于如何实际使用语言服务的示例。哈普?
-
对不起,我从来没有真正用它做过任何事情。但这就是我认为您可以对字符串进行类型检查的地方。可以看看stackoverflow.com/q/17965572/215552,那里有关于 TypeScript API 的讨论,但我不确定它的最新情况。还有this project on GitHub,不过是YMMV。
标签: typescript