【发布时间】:2020-01-17 14:15:31
【问题描述】:
我有一个场景,我想要一个可以接受任意数量的通用对象参数的函数。
我希望结果返回一个元组,其中该对象的每个通用参数都是元组位置类型。
示例
type Wrap<T> = {
obj: T;
}
function UnWrap<T extends Array<Wrap<One|Two>>>(...args:T){ //return type?
return args.map(i => i.obj);
}
type One = {
foo: string;
}
type Two = {
bar: string;
}
let one: Wrap<One> = {obj: {foo: 'abc'}}
let two: Wrap<Two> ={obj: {bar: 'abc'}}
// res type should be [One, Two, Two, One]
let res = UnWrap(one, two, two, one)
如果我只返回传入的确切类型,我可以让该类型工作:
function ReturnSelf<T extends Array<Wrap<One|Two>>>(...args:T): typeof args{
return args;
}
但我不确定如何索引['obj'] 类型。我想也许可以使用映射类型来做到这一点,但我不太明白。
【问题讨论】:
-
我对问题陈述有点困惑。在运行时没有类型或接口,所以 afaik 类型需要是泛型类型的一部分(可能是接口契约的一部分)。然后你可以简单地在一个元组中或多或少地映射出你已经在做的输出。
-
@cYrixmorten 不确定我理解你的意思......我正在尝试创建与重新选择“createSelector”的工作方式类似的东西(不在域中)。 github.com/reduxjs/reselect
-
没关系,看来我根本没有抓住你试图完成的任务的本质。