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/