我需要创建一个名为Instantiate的强类型方法来接受任何类型的对象.
如果对象包含任何属性作为类,那么它将创建该类的实例,因此该对象属性的返回应该是该类的InstanceType
如果不是一个类,那它就保持原样.
我的问题是我不能写出正确的返回类型. 该值与原始对象的键不匹配.
请忽略方法Instantiate的主体/实现. 会照顾好我自己的.我只需要有正确的Typescript 就可以了.
以下是我到目前为止所try 的.
class Person {
name!: "John Doe"
}
class Cat {
scream!: "Help!!!"
}
const configApp = {
isComplicated: true
}
const testData = {
person: Person,
cat: Cat,
config: configApp,
} as const
type TClass = abstract new (...args: any) => any;
type TInstances<OBJ> = Record<
keyof OBJ,
OBJ[keyof OBJ] extends TClass
? InstanceType<OBJ[keyof OBJ]>
: OBJ[keyof OBJ]
>;
const instantiate = <T ,>(obj:T): TInstances<T> => { return {} as any}
// Below should not error
const result = instantiate(testData);
result.person.name; // Error
result.cat.scream; // Error
result.config.isComplicated; // Error