【发布时间】:2022-08-09 19:00:58
【问题描述】:
使用从对象返回值的函数,其中包含来自对象的一些键列表,如下所示。
function mapObjToArray(obj, keys) {
return keys.map(key => obj[key])
}
const result = mapObjToArray({ A: \"a\", B: \"b\", C: \'c\', X: \'x\'}, [\'A\', \'B\'])
我想得到结果值的确切类型,在这种情况下我的意思是[\"a\", \"b\"],但是,使用下面的代码,结果类型是(\"a\" | \"b\" | \"c\" | \"x\")[] 而不是[\"a\", \"b\"]。
function mapObjToArray<T>(obj: T, keys: (keyof T)[]) {
return keys.map(key => obj[key])
}
const result = mapObjToArray({ A: \"a\", B: \"b\", C: \'c\', X: \'x\'} as const, [\'A\', \'B\'])
我可能会在 Variadic Tuple Type 方面稍有进步,但我得到了......
function mapObjToArrayWithVariadicTuple<T, X extends [...(keyof T)[]]>(obj: T, keys: X): [...T[X[number]][]] {
return keys.map(key => obj[key])
}
const resultVariadicTuple = mapObjToArrayWithVariadicTuple({ A: \"a\", B: \"b\", C: \'c\', X: \'x\'} as const, [\'A\', \'B\'])
越来越近,但仍然不是我想要的 typeof resultVariadicTuple (\"a\" | \"b\")[]
有没有办法得到我想要的结果类型???
-
@ tom10271 虽然这是真的,但我认为我们可以出于问题的目的假设传入的值(和类型)是静态的
标签: typescript variadic-tuple-types