I want to write a type that is generated automatically depending on user data
type CleanPropType = typeof Array | typeof Object | typeof Function | typeof Boolean | typeof String;
type Prop = {
type: CleanPropType,
default?:any
}
// define the type of properties for all components
type Props = {
[name:string]:Prop
}
// define properties for a specific component
let customComponentProps = {
name:{
type:String
}
}
type customComponentGenerator<T extends Props> = {
[name in keyof T]: ReturnType<T[name].type> // here error. WHY ?
}
// define the type of properties for a specific component
// but here an error occurs when accessing the "type" field
type customComponent = Partial<customComponentGenerator<typeof customComponentProps>>;
// I need the resulting type to work correctly
let userComponentProps : customComponent = {
name:'ComponentNameString',
} // ok
let userComponentProps2 : custromComponent = {
name:false, // must be err
otherField: 'str' // // must be err
}
the main problem is that I cannot access the nested field 'type', though T extends Props. thx