我try 编写一个函数fn()
,具有以下属性:
- 采用单个参数
x
,它是一个带有可选键"a"和"b"的对象(为了简单起见,每个字段可以是数字) - 它输出一个新的对象,其键与输入对象中提供的键相同,但每个字段都是一个特定的类(a—A,b—B),即期望的行为是:>>
- 如果我调用fn({a:1,b:1}),我收到{a:A,b:B}
- 如果我调用fn({b:1}),我收到{b:B},
- 如果我调用fn({}),我会收到{}.
可以将输入对象中的数值作为输出对象中类的初始化值.此外,新字段"c"、"d"、"e"、..可以稍后添加到该功能中.
我很难在类型级别上设置它,但也在JS代码中设置它.我编写了以下代码,它会引发Typescribe错误:
- 类型"string"不能分配给类型"keyof OutputObject".ts(2344)
- 类型'Partial'不能分配给类型'Pick OutputObject,K'.ts(2322)<>
class A {}
class B {}
interface InputObject {
a: number,
b: number
}
interface OutputObject {
a: A,
b: B
}
// My failed attempt at writing fn()
const fn = <
TObj extends Partial<InputObject>,
K extends keyof TObj
>(x: TObj): Pick<OutputObject, K> => {
let returnValue: Partial<OutputObject> = {}
if (x.a) {
returnValue.a = new A()
}
if (x.b) {
returnValue.b = new B()
}
return returnValue
}