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' }
Run Code Online (Sandbox Code Playgroud)
在编译类型中,类型Data是已知的,因此应该可以(尽管不容易)实现一个转换器,使该类型在运行时可用。
这将启用大量用例,例如 IO 验证。
对于我的用例,我不需要诸如泛型之类的高级类型。我只需要类型:对象、数组、字符串、数字和日期。
上下文:我正在构建一个 RPC 实现(https://github.com/brillout/wildcard-api)。
编辑:我不是在寻找像zod这样的东西,你用 zod 定义一个架构,然后推断 TypeScript 类型。我的用户直接使用 TypeScript 定义他们的类型,我需要在运行时知道这些类型。所以我确实需要一个编译时转换器。
是像ts-runtime你所追求的吗?这并不完全像你的问题所描述的那样,但看看这个。
您输入的代码:
type Data = {
name: string;
age: number;
};
Run Code Online (Sandbox Code Playgroud)
它输出:
import t from "ts-runtime/lib";
const Data = t.type(
"Data",
t.object(
t.property("name", t.string()),
t.property("age", t.number())
)
);
Run Code Online (Sandbox Code Playgroud)
然后您可以运行:
t.type(Data).assert({/* ... obj to evaluate ... */})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |