【发布时间】:2021-11-25 12:07:53
【问题描述】:
免得说我有这种类型
type foo = {
go: string;
start: string;
}
我怎样才能动态地创建一个返回的函数
{ go: '', start: '' }
在 Type Script 上有什么方法可以让我们仅根据类型动态生成空对象吗?或者这是不可能的,因为我们不能循环
我在想这样的事情
function generate<T>(T)<T> {
const obj = {}
for (const key of keyof T) {
obj[key] = ''
}
return obj
}
【问题讨论】:
-
不,这是不可能的。当您将 TypeScript 编译为 JavaScript 时,类型会被擦除;您不能在运行时使用reflection 来观察
foo。为什么你认为你需要这个功能?您可以开始构建类似模式的功能,这样就会有一个像const fooSchema = {go: "string", start: "string"} as const和generate things from that 这样的object,但我不知道您是否真的在寻找它。如果你是,它需要由某人建造。 -
只是出于好奇~问题是我已经有了一个大接口,所有的都是字符串。如果我可以遍历那个界面,我想我可以用它产生一些价值。
-
好吧,你不能用纯打字稿迭代一个接口;您需要编写或使用像 TS 转换器这样的代码生成器。 (例如,npmjs.com/package/ts-auto-mock)如果你只想使用 TypeScript,你必须在运行时自己做。你想要this beginning of a general schema solution吗?或者你想iterate over an array of key names?我正在寻求您的指导,这样我写的任何答案都会有重点,而不是二十页长(我倾向于写长答案)
-
谢谢,我认为迭代键名数组对我的问题要好得多。它足够小,不需要我创建一个完整的对象。
标签: typescript