首页 > 解决方案 > 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 }>. 有没有办法在没有联合类型的情况下解决这个问题?

标签: typescripttypescript-generics

解决方案


现在(2020 年 4 月)这似乎不太可能,但将来可能会发生。

看:


推荐阅读