【问题标题】:Type-check a string of TypeScript code对一串 TypeScript 代码进行类型检查
【发布时间】: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


【解决方案1】:

两种解决方案

不必为了运行ts而将js写入磁盘

我想避免将这些文件写入磁盘,因为

您可以使用ts-node : https://github.com/TypeStrong/ts-node

检查一串js

一个字符串的JS很容易检查。只需使用编译器 API 中的ts.transpile。也就是说... 你不想只检查一个 js 字符串。您想检查一组文件。因此建议只使用 ts-node。

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 1970-01-01
    • 2017-03-10
    • 2023-04-03
    • 2021-05-02
    • 2022-01-06
    • 1970-01-01
    • 2020-11-16
    • 2020-01-01
    相关资源
    最近更新 更多