typescript :实现转换器以在运行时访问类型

标签 typescript

TSC 将 TS 代码编译为 JS 后,类型被移除,不再可用。
但是,原则上,应该可以通过使用 webpack/typescript/Vite 转换器在运行时使类型可用。
有没有人做到这一点?

type Data = {
  name: string;
  age: number;
};

// How can we implement `getType()`?
console.log(getType<Data>());
// It should print:
// { name: 'string', age: 'number' }
在compile-type,Data的类型是已知的,因此应该可以(尽管不容易)实现一个转换器,使该类型在运行时可用。
这将启用大量用例,例如 IO 验证。
对于我的用例,我不需要诸如泛型之类的高级类型。我只需要类型:对象、数组、字符串、数字和日期。
上下文:我正在构建一个 RPC 实现( https://github.com/brillout/wildcard-api )。
编辑 :我不是在寻找类似 zod 的东西在其中使用 zod 定义架构,然后推断 TypeScript 类型。我的用户直接使用 TypeScript 定义他们的类型,我需要在运行时知道这些类型。所以我确实需要一个编译时转换器。

最佳答案

类似于 ts-runtime 你在追求什么?这与您的问题所描述的不完全一样,但请看一下。
您的输入代码:

type Data = {
  name: string;
  age: number;
};
它输出:
import t from "ts-runtime/lib";

const Data = t.type(
  "Data",
  t.object(
    t.property("name", t.string()),
    t.property("age", t.number())
  )
);
然后你可以运行:
t.type(Data).assert({/* ... obj to evaluate ... */})

关于 typescript :实现转换器以在运行时访问类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68484838/

相关文章:

typescript - Angular 2 在呈现应用程序之前加载数据

javascript - 如何在两个 ngFor 中获取有序索引?

reactjs - mapbox 图层的正确类型( typescript )在哪里?

javascript - 具有垫表初始化的 Angular Material 2分页器

typescript - 带有 typescript 的 React 路由器 v5 上所需的 url 参数,可以是未定义的

reactjs - JSX 的 Typescript 集类型注解

javascript - 为什么这个冒泡排序不起作用

javascript - 是的 - 在运行时创建和修改验证模式

typescript - 什么是 TypeScript 中的可选链接(Elvis 运算符)以及它是如何工作的?

json - 将索引上的项目属性更新为 Angular 2 中存储的数组