从Typescript接口生成对象

5
我明白这与Typescript的本意恰恰相反,但我希望能够通过程序从Typescript接口中生成一个对象。基本上,我想要像这样的东西:
interface Foo {
    bar: string
}

const generateObjFromInterface = (Foo) => // { bar: 'string'}

如果可能的话,实现方式有多矫揉造作也没关系!如果这是明确不可能的,那也是有帮助的信息!

提前感谢!


1
唯一的方法是处理源代码,因为接口在运行时不存在。类似于 这个库 所做的事情。 - Saravana
4个回答

3

这是可以实现的。随着typescript 2.4的到来,我们可以在编译期间使用自定义转换器对typescript进行转换,并获取所有属性列表,从而创建具有这些属性的对象。

这里有一个示例,但请注意 - 我已经说过,它需要使用尚未发布稳定版本的typescript 2.4 +。


这看起来就像是我梦寐以求的解决方案,非常感谢! - Leo Langinger
你是否成功使用过这个包?我一直在努力确定这是用户错误还是包本身的问题,但我一直收到以下错误:ts_transformer_keys_1.keys不是一个函数。 - Leo Langinger
不,我没有在实践中使用它。您是否按照编译程序的指南进行操作:https://github.com/kimamula/ts-transformer-keys#how-to-use-the-custom-transformer? 这是重要的步骤。 - Amid

2

由于TypeScript的接口在JavaScript输出中不存在,因此无法对接口进行运行时反射。

考虑以下TypeScript代码:

interface Foo {
    bar: string
}

这是生成的JavaScript代码:

enter image description here

由于没有JavaScript支持,你想做的事情根本不可能非常不自然。
编辑:想一想,你可以在运行时找到、读取和解析*.ts源文件。

0
我也曾经在寻找能够做到这一点的工具,但是没有找到。所以我开发了这个库https://www.npmjs.com/package/class-validator-mocker,它可以为使用class-validator装饰器注释的类属性生成随机数据。对于我的目的来说,效果非常好。

0

我使用了intermock(Google)来完成它,这里是一个演示页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接