typescript - Typescript - 从映射中替换类型属性名称
问题描述
我有一个函数,它将一个对象作为模型和一个表示映射的对象。它返回一个具有两个属性的对象:一个表示基本模型,另一个表示模型的每个属性都包装在另一种类型中。映射决定了返回对象的键,映射永远是
type Mapping<Model> = {
foo: string,
bar: string
}
function fooBar<M extends object, B extends Mapping>(model: M, mapping: B) {
return {
[mapping.foo]: model,
[mapping.bar]: recursiveWrap(model) //this function would go through the model and wrap each property
}
}
所以像这样调用这个函数:
fooBar({ message: 'hello' }, { foo: 'thing', bar: 'thing$' })
应该返回一个类似这样的类型:
type MyType = {
thing: { message: string },
thing$: WrappedType<{ message: string }>
}
但是我无法弄清楚如何从对象中替换属性名称并且仍然可以正确检查类型。
我跟着这个问题,但是返回的属性的类型是{ message: string } | WrappedType<{ message: string }>
. 有没有办法在没有联合类型的情况下解决这个问题?
解决方案
现在(2020 年 4 月)这似乎不太可能,但将来可能会发生。
看:
Typescript 问题 #12754:类型映射期间的增强键- 开放问题,大量用例
我想开始讨论在映射期间增加属性键的前景。
例如:通过算法:
type Changed<T> = { [ P in keyof T ] + "Changed" ?: Function; }
- 打字稿问题 #36623:设计会议笔记,2020年 1 月 31 日-“增强键”讨论 #12754
不一定说“是”,但可能不是近期。我们应该专注于速度。
推荐阅读
- html - 如何像手风琴一样在 Angular 6 中的下一个 div 上添加类?
- c# - 维护一个 ODBC 连接或连接/处理每次使用?
- javascript - 导出服务器以进行集成测试时出现 React Jest 问题
- android - 如何在android中使用java更改约束布局背景图像
- python - 删除由空行分隔的大的连续行块
- c# - 如何将 OAuthAuthorizationServerProvider HttpResponse 状态代码从 400 更改为我自己的?
- bash - 使用变量使用 bash 自动化 ldapsearch
- angular - 表单数据更改时视图不更新
- html - autocomplete="off" 不适用于没有表单标签的选择框的 chrome
- ajax - 如何防止 PrimeFaces 可编辑 DataTable 在变量中设置更新值?