不确定在打字稿中是否可行:
我有课:
class Foo<T> {
...
}
然后我需要一种转换类型的方法:
{
a: Foo<number>,
b: Foo<string>
}
收件人:
{
a: number,
b: string
}
所以我可以将其用作:
const ret = test({ a: new Foo<number>(), b: new Foo<string>() })
ret.a = 10; // number
ret.b = "test"; // string
谢谢!
----仅提供更多细节,实际上Foo
看起来像这样:
class Foo<T> {
constructor(public key: string) {
}
}
在方法测试中,我需要在传递的对象属性a
,b
和Foo.key
之间进行映射。
所以测试调用看起来像:
test({ a: new Foo<number>("aaa"), b: new Foo<string>("bbb") });
内部测试,我需要知道以下信息:{ a: "aaa", b: "bbb" }
,外部:{ a: number, b: string }
希望现在更加清楚:)
答案 0 :(得分:0)
我不能完全确定这是否能回答您的实际需求,但似乎可以回答以下书面问题:
class Foo<T> {
constructor(public value: T) {
}
}
interface IX {
a: Foo<number>;
b: Foo<string>;
}
const test = (x: IX) => ({
a: x.a.value,
b: x.b.value,
});
const ret = test({ a: new Foo<number>(3), b: new Foo<string>("3") })
ret.a = 10;
ret.b = "test";
这完全取决于您如何包装要从类Foo
中提取的值
答案 1 :(得分:0)
foo<Z extends object>(map: Z): { [K in keyof Z]: Z[K] extends Foo<infer P> ? P : Z[K] }> {
...
}
成功了-谢谢@Aluan Haddad