#javascript #typescript
Вопрос:
Я хочу написать тип, который генерируется автоматически в зависимости от пользовательских данных
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
}
основная проблема заключается в том, что я не могу получить доступ к вложенному полю ‘type’, хотя T расширяет Props.
thx
Комментарии:
1. Вы не можете использовать точечный синтаксис
.type
в выражениях типа TypeScript. Вам нужно будет использоватьT[name]["type"]
2. переписано